给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
分析:一个字符串的字符重新排列能变成另一个字符串,要求两个字符串出现的字符类型和数目相同。使用一个数组记录每个字符出现的情况即可。此处假设输入字符为ASCII字符。
1 #include <iostream> 2 #include <fstream> 3 #include <cstring> 4 5 using namespace std; 6 7 bool reachable( const char *s, const char *p ); 8 9 int main( int argc, char *argv[] ) { 10 string data_file = "./1.3.txt"; 11 ifstream ifile( data_file.c_str(), ios::in ); 12 if( !ifile.is_open() ) { 13 fprintf( stderr, "cannot open file: %s\n", data_file.c_str() ); 14 return -1; 15 } 16 string s, p; 17 while( ifile >>s >>p ) { 18 cout <<s <<" " <<p <<": " << boolalpha <<reachable( s.c_str(), p.c_str() ) <<endl; 19 } 20 ifile.close(); 21 return 0; 22 } 23 24 bool reachable( const char *s, const char *p ) { 25 int table[256] = { 0 }; 26 int slen = 0, plen = 0; 27 while( s[slen] != ‘\0‘ ) { ++table[s[slen++]]; } 28 while( p[plen] != ‘\0‘ && table[p[plen]] ) { --table[p[plen++]]; } 29 return p[plen] == ‘\0‘ && slen == plen; 30 }
测试文件
aa aa aa ab aaa aab abcdedfg abcdefg aa11df334 1fd343a1a abcdefg abcdgds
时间: 2024-10-05 14:41:33