将相邻且相同的字符用同一字符替换

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:59:45
怎样将相邻且相同的字符用同一字符替换?各位大哥大姐帮帮忙啊
如:输入abbbsrrbss 则输出a___s__b__
我自己做了一个 但是只能将两个相同字符替换 无法替换两个以上的

#include <iostream>
using namespace std;
int main()
{
const int NUM=10;
char str[NUM];
for(int i=0;i<NUM;++i)
cin>>str[i];

for(int m=0;m<NUM;++m)
{
if (str[m] == str[m - 1]&&str[m]!='\0')
{
str[m-1]='_';
str[m]=str[m-1];
}
}
for(int m1=0;m1<NUM;++m1)
{
cout<<str[m1];
}
return 0;
}

直接在你的代码上修改把,说下思路,用个变量current保存当前的字符,如果下个跟这个相同则替换为“_”否则赋值为下个字符,当然要特别考虑下开头的。1楼的就漏掉了相同字符的第一个了
下面是验证结果:
aaabccceff
___b___e__

代码:
#include <iostream>
using namespace std;
int main()
{
const int NUM=10;
char str[NUM];
for(int i=0;i<NUM;++i)
cin>>str[i];

char current = '\0';//当前字符
int firstSame;//标记第一个字符位置以便相同时替换
for(int m=0;m<NUM ;++m)
{
if (str[m] == current && str[m] != '\0')
{
str[m] = '_';
str[firstSame]='_';//会重复做,没想出更好的方法
}
else
{
current = str[m];
firstSame = m;
}
}
for(int m1=0;m1<NUM;++m1)
{
cout<<str[m1];
}
return 0;
}

#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
char a=str[0];
for(int m=0;str[m