题解:本题利用STL里面的string类和C语言中的字符串库函数来解题较为方便
1)交换前后字符可以的操作:使用函数substr(int index,int len) (参数:index截取字符的下标,len截取的长度)来截取原串里面的字符,然后用改变顺序相加即可,
2)将数字转化为字符串:itoa(int value,char * a,int radix)(参数:转化的值,字符指针(所存的字符数组的地址),转化后进制),不用’0’+cnt是为了防止cnt>=10的情况;
3)再次判断是否有相同的小写字母时,要记得判断是不是小写字母,否则有数字“11”等重叠的数字会出错
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
string a,b,c;
cin>>a;
int flag=1;
while(flag)
{
for(int i=0; i<a.size(); i++)
{
int len=a.size();
int cnt=0;
int j;
for(j=i; j<a.size(); j++)
{
if(a[j]!=a[i])///说明a[j-1]==a[i]
{
cnt=j-1-i;///所以cnt=j-1-i;
break;
}
}
if(j==a.size()) cnt=a.size()-i-1;///注意边界条件,可能一直相同到末尾,没有进if(a[j]!=a[i])的判断导致cnt的值没改变
if(cnt!=0)
{
///截取前后字符串
b=a.substr(0,i);
c=a.substr(j,len-j);
c.push_back(char(a[i]-32));
char e[10];
string d(itoa(cnt+1,e,10));///构造函数,直接使用char型字符串e[]来构造d,方便相加
c+=d;
a=c+b;
break;
}
i=j-1;///i赋为a[i],a[j]相等的那个
}
flag=0;
for(int j=0; j<a.size()-1; j++){ if(islower(a[j])&&a[j]==a[j+1]) {flag=1;break;} }///注意a[i]要为小写字母
}
cout << a << endl;
return 0;
}