描述
给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。
输入
第一行包含一个正整数k,表示至少需要连续出现的次数。1 <= k <= 1000。
第二行包含需要查找的字符串。字符串长度在1到1000之间,且不包含任何空白符。
输出
若存在连续出现至少k次的字符,输出该字符;否则输出No。
样例输入
3 abcccaaab
样例输出
c
为了学习正则表达式,我这里主要是用正则表达式做的,匹配第一个至少出现k次的字符串,存在则输出匹配字符串第一个字符,否则输出No,于是我给出这样的正则表达式:(w)(1){k-1,},在C++里面需要加上转意符得到下面代码中的正则表达式,注意由于k是用户输入的,所以才出现代码中用一个字符串保存不完整正则信息,后面k输入完整后补全。更多关于正则表达式可以访问:编程胶囊:正则表达式入门,里面还有正则表达式进阶及教程
完整代码
#include <iostream>
#include <regex>
using namespace std;
int main(int argc, char const *argv[])
{
string str, k_, reg_str="(\w)(\1){";
//reg_str包含匹配的正则表达式信息
regex reg;
smatch math_str;
int k;
cin >> k >> str; k--;
k_ = to_string(k);
k_ += ",}";
reg_str += k_;
reg.assign(reg_str);
if(regex_search(str, math_str, reg)) cout << ((string)math_str[0])[0];
else cout << "No
";
system("pause");
return 0;
}