Почему string :: find () не работает в этом коде? - PullRequest
0 голосов
/ 11 января 2019

У меня есть переменная типа std :: string. Я хочу проверить, содержит ли он определенную строку std ::. Как бы я это сделал?

#include<bits/stdc++.h>
using namespace std;

 int main()
 {
     int n;
     string str;
     cin >> n;
    string str1 = "not";
    while(n--)
   {
     cin >> str;
       cout << "2";
    if(str.size() >= str1.size())
    {
      if (str.find(str1) != string::npos) 
      {
        cout << "1";
      } 
     else
        cout << "2";
    }   

  }
    return 0;
}

Ввод:

      2
      i do not have any fancy quotes
      when nothing goes right go left

вывод: нет вывода

1 Ответ

0 голосов
/ 12 января 2019

После чтения целого числа из входного потока, вы должны использовать cin.ignore(); перед чтением любых строк из входного потока.

cin.ignore(); игнорирует символ "новая строка".

Кроме того, вы не можете прочитать строку, содержащую несколько пробелов с cin >> str;. Вы должны использовать getline(cin, str); для чтения строки.

Ваш модифицированный код:

#include<bits/stdc++.h>
using namespace std;

int main() {
  int n;
  string str;
  cin >> n;
  cin.ignore();
  string str1 = "not";
  while (n--) {
    getline(cin, str);
    if (str.find(str1) != string::npos) 
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
  }
  return 0;
}

Введите:

7
a
bbbbbbbbbb
not bad
not good
not not not not
NOT
aaaaaanotbbb

Выход:

NO
NO
YES
YES
YES
NO
YES
...