2015-10-02 5 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, а затем вы объявили его снова как междунар. Вероятно, именно поэтому он не работает.

Вы можете решить эту проблему очень легко, используя регулярные выражения. 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 не вместе. Таким образом, условие было бы неверным. Но я думал, что тебе нужно только 3А быть вместе. : -o –

+0

да, что, если это так, мне нужно найти каждое событие A и проверить, есть ли следующие 3 A (индекс + 2), так как теперь есть 2 символа. пример AbAdAc, A - индекс 0, + 2 индекс 3 - его еще A и так далее. это моя логика? – Ravensmith450

Смежные вопросы