Проверьте, содержит ли строка строку в C ++

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

Есть функция, которая возвращает true, если строка найдена, а false, если это не так?

Благодарю.

Используйте std::string::find следующим образом:

 if (s1.find(s2) != std::string::npos) { std::cout << "found!" << '\n'; } 

Примечание: «найдено!» будет напечатано, если s2 является подстрокой s1 , оба s1 и s2 имеют тип std::string .

Вы можете попробовать использовать функцию find :

 string str ("There are two needles in this haystack."); string str2 ("needle"); if (str.find(str2) != string::npos) { //.. found. } 

На самом деле, вы можете попробовать использовать boost-библиотеку, я думаю, std :: string не предоставляет достаточного количества методов для выполнения всей обычной операции string. В boost вы можете просто использовать boost::algorithm::contains :

 #include "string" #include "boost/algorithm/string.hpp" using namespace std; using namespace boost; int main(){ string s("gengjiawen"); string t("geng"); bool b = contains(s, t); cout << b << endl; return 0; } 

Вы можете попробовать это

 string s1 = "Hello"; string s2 = "el"; if(strstr(s1.c_str(),s2.c_str())) { cout << " S1 Contains S2"; } 

Если вы не хотите использовать стандартные библиотечные функции, ниже приведено одно решение.

 #include  #include  bool CheckSubstring(std::string firstString, std::string secondString){ if(secondString.size() > firstString.size()) return false; for (int i = 0; i < firstString.size(); i++){ int j = 0; if(firstString[i] == secondString[j]){ while (firstString[i] == secondString[j] && j < secondString.size()){ j++; i++; } if (j == secondString.size()) return true; } } return false; } int main(){ std::string firstString, secondString; std::cout << "Enter first string:"; std::getline(std::cin, firstString); std::cout << "Enter second string:"; std::getline(std::cin, secondString); if(CheckSubstring(firstString, secondString)) std::cout << "Second string is a substring of the frist string.\n"; else std::cout << "Second string is not a substring of the first string.\n"; return 0; } 

Это простая функция

 bool find(string line, string sWord) { bool flag = false; int index = 0, i, helper = 0; for (i = 0; i < line.size(); i++) { if (sWord.at(index) == line.at(i)) { if (flag == false) { flag = true; helper = i; } index++; } else { flag = false; index = 0; } if (index == sWord.size()) { break; } } if ((i+1-helper) == index) { return true; } return false; } 

Из стольких ответов на этом сайте я не нашел четкого ответа, поэтому через 5-10 минут сам понял сам ответ. Но это можно сделать в двух случаях:

  1. Либо вы ЗНАЕТ позицию подстроки, которую вы ищете в строке
  2. Либо вы не знаете позицию и ищете ее, char char …

Итак, предположим, что мы ищем подстроку «cd» в строке «abcde», и мы используем простейшую встроенную функцию substr в C ++

для 1:

 #include  #include  using namespace std; int i; int main() { string a = "abcde"; string b = a.substr(2,2); // 2 will be c. Why? because we start counting from 0 in a string, not from 1. cout << "substring of a is: " << b << endl; return 0; } 

для 2:

 #include  #include  using namespace std; int i; int main() { string a = "abcde"; for (i=0;i 
 #include  // std::search #include  using std::search; using std::count; using std::string; int main() { string mystring = "The needle in the haystack"; string str = "needle"; string::const_iterator it; it = search(mystring.begin(), mystring.end(), str.begin(), str.end()) != mystring.end(); // if string is found... returns iterator to str's first element in mystring // if string is not found... returns iterator to mystring.end() if (it != mystring.end()) // string is found else // not found return 0; } 
  • В Java, как проверить, содержит ли строка подстроку (игнорируя регистр)?
  • Interesting Posts

    Как преобразовать String в long в Java?

    Веб-API: загрузка нескольких файлов отдельно

    Does Notepad ++ показывает все скрытые символы?

    Врач-врач говорит: «Предупреждение: / usr / local / include не доступно для записи».

    Каким образом можно узнать, что происходит в игре с помощью Android-приложения?

    Как клонировать ArrayList, а также клонировать его содержимое?

    В чем разница между боксом / распаковкой и типом литья?

    Могу ли я получить проверку орфографии в MS Word, чтобы помнить мои грамматические решения?

    Как разделять и присоединяться без перекодирования видеофайлов AVC / MPEG-TS в Windows с помощью ffmpeg?

    Прокрутите список в WPF в определенную строку

    Методы расширения требуют объявления classа статическим

    Изменение сети по умолчанию VirtualBox назначает виртуальные машины, подключенные к NAT

    Как запустить class в WAR из командной строки?

    Как начать работу с GTest и CMake

    Должен ли я хранить мои изображения в базе данных или папках?

    Давайте будем гением компьютера.