it-swarm.com.de

Prüfen Sie, ob eine Zeichenfolge eine Zeichenfolge in C++ enthält

Ich habe eine Variable vom Typ std::string. Ich möchte prüfen, ob es einen bestimmten std::string enthält. Wie würde ich das machen?

Gibt es eine Funktion, die true zurückgibt, wenn der String gefunden wird, und false, wenn dies nicht der Fall ist?

Vielen Dank.

374
neuromancer

Verwenden Sie std::string::find wie folgt:

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

Hinweis: "gefunden!" Wird gedruckt, wenn s2 eine Teilzeichenfolge von s1 ist, beide s1 und s2 vom Typ std::string sind.

552
Matthieu N.

Sie können die Funktion find verwenden:

string str ("There are two needles in this haystack.");
string str2 ("needle");

if (str.find(str2) != string::npos) {
//.. found.
} 
94
codaddict

Tatsächlich können Sie versuchen, die Boost-Bibliothek zu verwenden. Ich denke, std :: string bietet nicht genügend Methoden, um alle gängigen Zeichenfolgenoperationen auszuführen. Bei Boost können Sie einfach 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;
}
20
Geng Jiawen

Sie können es versuchen

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

Wenn Sie keine Standard-Bibliotheksfunktionen verwenden möchten, finden Sie unten eine Lösung.

#include <iostream>
#include <string>

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 the first characters match
        if(firstString[i] == secondString[j]){
            int k = i;
            while (firstString[i] == secondString[j] && j < secondString.size()){
                j++;
                i++;
            }
            if (j == secondString.size())
                return true;
            else // Re-initialize i to its original value
                i = k;
        }
    }
    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;
}
4
Testing123

Dies ist eine einfache Funktion

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;
}
0
neda

Aus so vielen Antworten auf dieser Website habe ich keine eindeutige Antwort herausgefunden. In 5-10 Minuten habe ich die Antwort selbst herausgefunden. Dies kann jedoch in zwei Fällen erfolgen:

  1. Entweder Sie KENNEN die Position der Unterzeichenfolge, nach der Sie in der Zeichenfolge suchen
  2. Entweder du weißt nicht die Position und suchst danach, char by char ...

Nehmen wir also an, wir suchen nach der Unterzeichenfolge "cd" in der Zeichenfolge "abcde" und verwenden die einfachste in C++ integrierte Funktion substr

für 1:

#include <iostream>
#include <string>

    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;
}

für 2:

#include <iostream>
#include <string>

using namespace std;
int i;

int main()
{
    string a = "abcde";

    for (i=0;i<a.length(); i++)
    {
        if (a.substr(i,2) == "cd")
        {
        cout << "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;
}
0
user7655194

Sie können auch den System-Namespace verwenden. Dann können Sie die Methode includes verwenden.

#include <iostream>
using namespace System;

int main(){
    String ^ wholeString = "My name is Malindu";

    if(wholeString->ToLower()->Contains("malindu")){
        std::cout<<"Found";
    }
    else{
        std::cout<<"Not Found";
    }
}
0
Malindu Dilanka