12
votes

Comment trouver toutes les positions d'une sous-chaîne dans une chaîne?

Je veux rechercher une grande chaîne pour tous les emplacements d'une chaîne.


0 commentaires

4 Réponses :


2
votes

Tout simplement utiliser std :: string :: recherche () code> qui retourne la position à laquelle la soustrine a été trouvée, ou std :: string :: npos code> si aucun n'était trouvé.

ici est la documentation. P>

An Voici l'exemple pris à partir de cette documentation: P>

// string::find
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("There are two needles in this haystack with needles.");
  string str2 ("needle");
  size_t found;

  // different member versions of find in the same order as above:
  found=str.find(str2);
  if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;

  found=str.find("needles are small",found+1,6);
  if (found!=string::npos)
    cout << "second 'needle' found at: " << int(found) << endl;

  found=str.find("haystack");
  if (found!=string::npos)
    cout << "'haystack' also found at: " << int(found) << endl;

  found=str.find('.');
  if (found!=string::npos)
    cout << "Period found at: " << int(found) << endl;

  // let's replace the first needle:
  str.replace(str.find(str2),str2.length(),"preposition");
  cout << str << endl;

  return 0;
}


1 commentaires

@sehe: Il y en avait un dans la documentation liée (que j'ai maintenant recopié). Un peu trop tard apparemment;)



13
votes

en utilisant std :: string :: trouver . Vous pouvez faire quelque chose comme: xxx


EDIT : DOH! Merci pour la remarque, Nawaz! Mieux?


3 commentaires

C'est mieux. Mais maintenant, avez-vous besoin du si-ele à l'intérieur de la boucle?


Ha, gentil :) Voici ce qui se passe quand je suis toujours à moitié endormi: D Nope, je n'en ai pas besoin. Juste à la première fois, je pensais que sans cela, je me manquerais le dernier caractère, si le my_sub_string est juste une lettre qui est placée à la fin du mystring . Merci encore!


Cela a l'air mieux que plus tôt ... +1



14
votes


3
votes

Je vais ajouter une autre approche possible avec une autre approche avec std :: Rechercher , fonctionne comme std :: string :: Trouver , la différence est que Vous travaillez avec des itérateurs, comme: xxx

Je trouve que ce parfois surperforms std :: string :: trouve , esp. Si vous représentez votre chaîne en tant que vecteur .


0 commentaires