检查字符串中是否出现相同的字符

时间:2015-10-02 06:04:01

标签: c++

我如何检查下面文本块的每一行是否包含单词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;
                }
            }

1 个答案:

答案 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