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.
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.
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.
}
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;
}
Sie können es versuchen
string s1 = "Hello";
string s2 = "el";
if(strstr(s1.c_str(),s2.c_str()))
{
cout << " S1 Contains S2";
}
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;
}
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;
}
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:
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;
}
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";
}
}