首页 > 代码库 > 数组与字符串 1.5
数组与字符串 1.5
利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串"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 }
测试文件
aaaabaaaaabaabbaaabbaaaaabbbbbbabcdefghello word dfd dfd asdf sd
数组与字符串 1.5
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。