L1-058 6翻了
解题思路
- 思路1
for遍历字符串,记录查询由‘6’开头,查到后进行cnt++,判断有几个‘6’,如果9个‘6’以上的就直接输出‘27’,大于3个‘6’输出‘9’,否则输出cnt个‘6’,若不是由‘6’开头就直接输出s[i]即可
三目运算符可真香,小声bb
归纳一下
a ? b : c;
如果a为真,则执行b,否则执行c- 函数
string(n,'c')
的功能是:返回由n个字符c组成的字符串
附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
string s;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
getline(cin,s);
for(int i=0;i<s.length();i++){
int cnt=0;
while(s[i]=='6'){
i++;
cnt++;
}
cout<<(cnt>9?"27":(cnt>3?"9":string(cnt,'6')));
cout<<s[i];
}
return 0;
}
- 思路2
做完这道题之后我想知道有没有更简便的方法来判断字符串中是否含有x个以上连续的数字,然后我发现了正则表达式这个神仙做法
正则表达式
- 头文件为
<regex>
regex_replace()
是替换匹配,即可以将符合匹配规则的子字符串替换为其他字符串regex_search()
是搜索匹配,即搜索字符串中存在符合规则的子字符串regex_match()
是全文匹配,即要求整个字符串符合匹配规则
符号 | 作用 |
---|---|
+ | 前面的元素重复1次或多次 |
* | 前面的元素重复任意次 |
? | 前面的元素重复0次或1次 |
{n} | 前面的元素重复n次 |
{n,} | 前面的元素重复至少n次 |
{n,m} | 前面的元素重复至少n次,至多m次 |
附上代码
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
string s;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
getline(cin,s);
cout<<regex_replace(regex_replace(s,regex("6{10,}"), "27"),regex("6{4,}"),"9");
return 0;
}
来源:CSDN
作者:Fiveneves
链接:https://blog.csdn.net/Fiveneves/article/details/104716056