2015-10-02 91 views
-4

我怎麼能檢查下面的文本塊的每行字3正如在一起,然後保存該行有它檢查一次出現在字符串中相同字符的

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

絕對沒有在溶液中做出的努力。這是非常基本的C++。 – CoffeeandCode

+0

把字符串放在一個向量中,並遍歷向量並使用['find'](http://en.cppreference.com/w/cpp/string/basic_string/find)來查找子字符串? –

+0

@CoffeeandCode對不起,我已更新我的問題。 – Ravensmith450

回答

1

在代碼中,你已宣佈出現爲bool,然後你再宣佈它作爲一個int。可能這就是它不工作的原因。

您可以使用正則表達式很容易地解決這個問題。 Google「C++正則表達式」獲取更多細節。你也可以問我是否有任何困惑。我給根據您在下面輸入一個代碼示例:

#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 
+0

謝謝,如果AbAdAc呢? Ax,其中x是隨機字母表。 – Ravensmith450

+0

在AbAdAc中,3A不在一起。所以情況不會是真的。但我認爲你只想要3A在一起。 :-o –

+0

是的,如果它是這樣的,我是否需要找到A的每個出現,並檢查下一個3 A(索引+ 2)是否現在有2個字符。例如AbAdAc,A是索引0,+ 2索引3其仍然是A,依此類推。我的邏輯正確嗎? – Ravensmith450

相關問題