首页 > 代码库 > 数组与字符串 1.1

数组与字符串 1.1

实现一个算法,确定一个字符串的所有字符是否全都不同。假使不允许使用额外的数据结构,又该如何处理?

分析:依次遍历输入字符串的每个字符,若当前字符已经出现过,则返回false;否则,继续处理下一个字符。可以使用位操作来降低空间要求,假设输入字符为ASCII字符。

 1 #include <iostream> 2 #include <fstream> 3 #include <string> 4  5 using namespace std; 6  7 bool isUnique( const char *s ); 8  9 int main( int argc, char *argv[] ) {10     string data_file = "./1.1.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 str;17     while( ifile >>str ) {18         cout <<str <<": ";19         cout <<boolalpha <<isUnique( str.c_str() ) <<endl;20     }21     ifile.close();22     return 0;23 }24 25 bool isUnique( const char *s ) {26     // bool table[256] = { false };27     unsigned char table[32] = { 0 };28     while( *s != \0 ) {29         if( table[*s/8] & 1<<*s%8 ) { return false; }30         table[*s/8] |= 1<<*(s++)%8;31     }32     return true;33 }

测试文件

aaaababcabcdaaaaaaaaaaaaaaaaaaa

 

数组与字符串 1.1