L1-058 6翻了
作者:
lvjj
,
2024-03-20 13:27:17
,
所有人可见
,
阅读 6
#include <bits/stdc++.h>
// #include <algorithm>
#include <string>
using namespace std;
string str;
int i=0;
int num;
int main(){
getline(cin,str);//读入一行,到\n就停下,但是不接收\n。
while(i<str.size()){ //不要写成str[i]!='\n',因为getline不接收\n
if(str[i]=='6'){//遇到第一个6
num = 1;
while(str[++i]=='6')//判断是否有连续的6
{
num++;
}
if (num > 3 && num <= 9) {
str.replace(str.begin()+i - num, str.begin()+i, "9"); //replace替换某两个区间内的字符要注意的点:可能会改变整个字符串str的各元素索引,访问的下标要用str.begin()+的方式
i=i-num + 1;//替换子字符串后,因为替换后的子字符串长度和原来的不一样,所以会改变整个字符串str的各元素索引
//上面这个代码通过刷新i的位置就完美解决了这个问题
} else if (num > 9) {
str.replace(str.begin()+i - num, str.begin()+i, "27");
i=i-num + 1;
}
}
i++;//如果没遇到6就继续
}
cout<<str;
return 0;
}