标签:style blog color io os ar for 文件 div
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串"aabcccccaaa"会变为"a2b1c5a3"。若“压缩”后的字符串没有变短,则返回原先的字符串。
分析:依次遍历输入字符串的每个字符,若当前字符与前一个字符相同,则计数加1;否则,将前一个字符及其出现次数存入压缩字符串,并将计数置1。
1 #include <iostream> 2 #include <fstream> 3 #include <cstring> 4 #include <sstream> 5 6 using namespace std; 7 8 string compress( string& str ); 9 10 int main( int argc, char *argv[] ) { 11 string data_file = "./1.5.txt"; 12 ifstream ifile( data_file.c_str(), ios::in ); 13 if( !ifile.is_open() ) { 14 fprintf( stderr, "cannot open file: %s\n", data_file.c_str() ); 15 return -1; 16 } 17 string str; 18 while( getline( ifile, str ) ) { 19 cout <<str <<": "; 20 cout <<compress( str ) <<endl; 21 } 22 ifile.close(); 23 return 0; 24 } 25 26 string compress( string& str ) { 27 int cnt = 1, slen = str.length(); 28 if( slen <= 2 ) { return str; } 29 stringstream ss; 30 for( int i = 1; i < slen; ++i ) { 31 if( str[i] == str[i-1] ) { ++cnt; continue; } 32 ss <<str[i-1] <<cnt; 33 cnt = 1; 34 } 35 ss <<str[slen-1] <<cnt; 36 if( slen > ss.str().size() ) { return ss.str(); } 37 return str; 38 }
测试文件
a
aa
ab
aaa
aab
aabb
aaabb
aaaaabbbbbb
abcdefg
hello word
dfd dfd
asdf sd
标签:style blog color io os ar for 文件 div
原文地址:http://www.cnblogs.com/moderate-fish/p/3971536.html