2010-02-26 26 views
289

eine Zeichenfolge enthält Ich habe eine Variable vom Typ Zeichenfolge. Ich möchte überprüfen, ob es eine bestimmte Zeichenfolge enthält. Wie würde ich das tun?Überprüfen Sie, ob eine Zeichenfolge in C++

Gibt es eine Funktion, die wahr zurückgibt, wenn die Zeichenfolge gefunden wird, und falsch, wenn dies nicht der Fall ist?

+4

Haben Sie char * Zeichenfolge oder die Zeichenfolge der STL bedeuten? – anthares

+0

Es ist kein char * String. Ich musste enthalten, um es zu verwenden. – neuromancer

+0

Einige der Lösungen verwenden s2 für die Zeichenfolge, die ich finden möchte. Funktioniert es noch, wenn ich etwas wie "das ist ein String" anstelle von s2 verwende? – neuromancer

Antwort

438

Verwenden 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, sowohl s1 als auch s2 vom Typ std :: string sind.

76

Sie können versuchen, mit der find Funktion:

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

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

Eigentlich kann man versuchen Boost-Bibliothek zu verwenden, glaube ich std :: string nicht genug Methode nicht liefern alle die gemeinsame Zeichenfolge zu tun operation.In Schub, können Sie einfach die boost::algorithm::contains verwenden:

#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; 
} 
+15

"Ich denke, std :: string liefert nicht genug Methode, um alle gängigen String-Operation zu tun". Aber es gibt eine "Finde" -Methode für genau die betreffende Aufgabe. Keine Notwendigkeit, eine Bibliotheksabhängigkeit einzuführen. – stefan

+4

@stefan, du hast Recht, es gibt eine Methode zu finden, aber was ist mit Split, ersetzen und viele andere Mitarbeiter.Sie können std :: string mit der Zeichenfolge api in Java.PS: Auch ich glaube, dass enthält viel eleganter ist als finden Sie, um zu überprüfen, ob eine Zeichenfolge eine andere Zeichenfolge enthält. –

4

können Sie versuchen, diese

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

Wenn Sie keine Standardbibliotheksfunktionen 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(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; 
} 
1

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

Hallo, willkommen in SO. Könnten Sie Ihre Antwort bitte [editieren] und einen Kommentar hinzufügen, wie es funktioniert und wie es sich von anderen Antworten unterscheidet? Vielen Dank! –

-1
#include <algorithm>  // std::search 
#include <string> 
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; 
} 
+3

Bitte versuchen Sie, Code als Antwort zu vermeiden und versuchen Sie zu erklären, was er tut und warum. Ihr Code ist möglicherweise nicht offensichtlich für Personen, die nicht über die entsprechende Codiererfahrung verfügen. Bitte bearbeiten Sie Ihre Antwort, um [Klärung, Kontext und versuchen Sie, Einschränkungen, Annahmen oder Vereinfachungen in Ihrer Antwort zu erwähnen.] (Https://stackoverflow.com/help/how-to-answer) –

Verwandte Themen