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

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

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

Спасибо.

вопрос задан 26.02.2010
neuromancer
17124 репутация

8 ответов


  • 491 рейтинг

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

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

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

    ответ дан does_not_exist, с репутацией , 26.02.2010
  • 87 рейтинг

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

    string str ("There are two needles in this haystack.");
    string str2 ("needle");
    
    if (str.find(str2) != string::npos) {
    //.. found.
    } 
    
    ответ дан codaddict, с репутацией 337564, 26.02.2010
  • 17 рейтинг

    На самом деле, вы можете попробовать использовать библиотеку boost, я думаю, что std :: string не предоставляет достаточного количества методов для выполнения всей обычной строковой операции. В бусте вы можете просто использовать 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;
    }
    
    ответ дан Geng Jiawen, с репутацией 3603, 23.06.2014
  • 8 рейтинг

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

    string s1 = "Hello";
    string s2 = "el";
    if(strstr(s1.c_str(),s2.c_str()))
    {
       cout << " S1 Contains S2";
    }
    
    ответ дан HappyTran, с репутацией 196, 2.06.2015
  • 3 рейтинг

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

    #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;
    }
    
    ответ дан Testing123, с репутацией 87, 8.10.2016
  • 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;
    }
    
    ответ дан neda, с репутацией 9, 27.03.2017
  • 0 рейтинг

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

    1. Либо вы ЗНАТЬ положение подстроки, которую вы ищете в строке
    2. Либо вы не знаете позиции и искать его, символ за символом. , ,

    Итак, давайте предположим, что мы ищем подстроку "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<< "substring of a is: " << a.substr(i,2) << endl;    // i will iterate from 0 to 5 and will display the substring only when the condition is fullfilled 
            }
        }
        return 0;
    }
    
    ответ дан user7655194, с репутацией 1, 4.05.2018
  • -2 рейтинг
    #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;
    }
    
    ответ дан zaonline, с репутацией 1, 20.08.2017