将字符串中相邻相同的子串合并为一个子串

来源:互联网 发布:软件代替身份证读卡器 编辑:程序博客网 时间:2024/06/06 05:36
/*****    问题描述:将字符串中相邻相同的子串合并为一个子串,如"12342343454565678789" -- "123456789"***/#include <iostream>#include <string>using namespace std;void Unite_Str(string s)//合并函数{string st(10,0);//st用于保存合并之后的串,长度固定为10,//不过这边用自动增长的类型比较好unsigned int i=0,j=0,cur_index=0;//cur_index为当前在字符串的位置,i用于保存相同字符的偏移量unsigned int t=0;//用于存储st串时用st[t]=s[cur_index];//第一个字符++cur_index; ++t;while(cur_index<s.size()){j=0;while(j<st.size() && cur_index<s.size()){if(st[j]==s[cur_index])for(unsigned int n=0;cur_index+n<s.size();++n){//向前寻找相同字符if(st[j+n]==s[cur_index+n]){cur_index++;//略过相同的部分continue;}else{i=n;//i取得相同部分的字符个数,不过好像这个没什么用…在这里break;}//if}//forelse ++j;if(i!=0) break;//如果偏移量不为0结束循环}//whileif(0==i && cur_index<s.size()) {//置入下个字符st[t++]=s[cur_index];cur_index++;continue;}else{i=0;//重置偏移量为0}//if}//whilecout<<"合并之前为:"<<s<<endl;cout<<"合并之后为:"<<st<<endl;}void main(){string sm;cout<<"请输入一个待合并串:"<<endl;cin>>sm;Unite_Str(sm);}

写得不好,不过总算是解决了问题,接下去要改进下程序…
原创粉丝点击