您的位置:首页 > 其它

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

2011-10-15 19:59 417 查看
/*
**
**    问题描述:将字符串中相邻相同的子串合并为一个子串,如"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
}//for
else ++j;

if(i!=0) break;	//如果偏移量不为0结束循环
}//while
if(0==i && cur_index<s.size())
{	//置入下个字符
st[t++]=s[cur_index];
cur_index++;
continue;
}
else
{
i=0;	//重置偏移量为0
}//if
}//while

cout<<"合并之前为:"<<s<<endl;
cout<<"合并之后为:"<<st<<endl;
}

void main()
{
string sm;

cout<<"请输入一个待合并串:"<<endl;
cin>>sm;

Unite_Str(sm);
}


写得不好,不过总算是解决了问题,接下去要改进下程序…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐