我如何检查下面文本块的每一行是否包含单词3 As,然后保存哪一行有
12345ArAcAd21
32A293AaAbAc3
AaAcAd8922113
Aa34442108131
我将每一行提取成字符串数组,每行的大小为13,有4行。在上面的文本块中,我们可以看到第1,2,3行连续有3Ax,其中x是随机字符。 所以我想得到1号,2号,3号。
我该怎么做?
现在我在这里做了什么
bool occur = true;
for (size_t i = line.find("A"); i != string::npos; i = line.find("A", i + 2)) {
if (line[i + 2] == 'A') {
for (int x = 0; x < 3; x++) {
if (line[i + x + 2] != 'A') {
occur = false;
break;
}
}
} else {
// skips it
continue;
}
}
答案 0 :(得分:2)
在您的代码中,您已声明为bool,然后再将其声明为int。可能这就是它无法正常工作的原因。
使用正则表达式可以非常轻松地解决此问题。 Google&#34; c ++正则表达式&#34;更多细节。你也可以问我是否有任何混淆。我根据您的输入提供示例代码:
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main()
{
string str[4];
str[0] = "12345A5AcAd21";
str[1] = "32A293AaAbAc3";
str[2] = "AaAcAd8922113";
str[3] = "Aa34442108131";
for( int i=0; i<4; i++ ) { //for each string
string line = str[i];
regex e1(".*A.A.A.*"); //pattern = AxAxAx in any part of the string
bool match = regex_match(line, e1);
if(match) {
cout << i << ": " << line << endl;
//enter your code here
}
}
return 0;
}
<强>输出:强>
0: 12345ArAcAd21
1: 32A293AaAbAc3
2: AaAcAd8922113