usar resueltos leer imprimir funciones ejercicios comparar como caracteres cadenas cadena arreglo c++ string substring

resueltos - Compruebe si una cadena contiene una cadena en C++



imprimir cadena de caracteres en c (8)

A partir de tantas respuestas en este sitio web, no encontré una respuesta clara, así que en 5-10 minutos lo resolví yo mismo. Pero esto se puede hacer en dos casos:

  1. O SABES la posición de la subcadena que buscas en la cadena
  2. O no conoce la posición y la busca, char por char ...

Entonces, asumamos que buscamos la subcadena "cd" en la cadena "abcde", y usamos la función incorporada substr más simple en C ++

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

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

Tengo una variable de tipo std::string . Quiero comprobar si contiene una cierta std::string . ¿Como podría hacerlo?

¿Existe una función que devuelva verdadero si se encuentra la cadena y falso si no lo es?

Gracias.


En realidad, puedes intentar usar la biblioteca boost, creo que std :: string no proporciona un método suficiente para realizar todas las operaciones de cadena comunes. En boost, puedes usar el 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; }


Esta es una función simple

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


Puedes intentar usar la función de std::string::find :

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


Puedes probar esto

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


Si no desea utilizar las funciones estándar de la biblioteca, a continuación encontrará una solución.

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


Use std::string::find siguiente manera:

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

Nota: "encontrado!" se imprimirá si s2 es una subcadena de s1 , tanto s1 como s2 son de tipo std::string .


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