###描述 給定一個字元串,在字元串中找到第一個連續出現至少k次的字元。 ###輸入 第一行包含一個正整數k,表示至少需要連續出現的次數。1 ⇐ k ⇐ 1000。 第二行包含需要查找的字元串。字元串長度在1到1000之間,且不包含任何空白符。 ###輸出 若存在連續出現至少k次的字元,輸出該字元; ...
描述
給定一個字元串,在字元串中找到第一個連續出現至少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\n";
system("pause");
return 0;
}