Écrivez une fonction CountMatchches qui recherche la sous-chaîne de la chaîne donnée et renvoie le nombre de fois que la sous-chaîne apparaît dans la chaîne. p>
J'ai été coincé sur ce temps maintenant (plus de 6 heures) et j'apprécierais vraiment toute aide que je peux obtenir. J'aimerais vraiment comprendre cela mieux. P>
int countMatches(string str, string comp) { int small = comp.length(); int large = str.length(); int count = 0; // If string is empty if (small == 0 || large == 0) { return -1; } // Increment i over string length for (int i = 0; i < small; i++) { // Output substring stored in string for (int j = 0; j < large; j++) { if (comp.substr(i, small) == str.substr(j, large)) { count++; } } } cout << count << endl; return count; }
3 Réponses :
Je l'ai compris. Je n'ai pas besoin d'une boucle imbriquée parce que je comparais seulement la chaîne secondaire à celle de la chaîne. Il a également éliminé la nécessité de prendre la sous-chaîne de la première chaîne. Sooo ... Pour les personnes intéressées, il aurait dû ressembler à ceci:
Putain j'étais au milieu d'une réponse
Oui, cela fonctionne. Mais chacun de ces appels vers substr code> crée une chaîne temporaire, qui est détruite après la comparaison. C'est beaucoup de mémoire. Voir ma réponse pour une autre approche.
Le problème avec votre fonction est que vous vérifiez que:
Bonjour code> est la sous-chaîne de Bonjour code> Li>
-
ello code> est la sous-chaîne de ello code> li>
-
llo code> est la sous-chaîne de llo code> li>
- ... li>
ul>
Bien sûr, cela correspond à 5 fois dans ce cas. p>
Ce que vous avez vraiment besoin est: p>
- pour chaque position
i code> de str code> li>
- Vérifiez si la sous-chaîne de
STR code> à partir de i code> et de longueur = comp.size () code> est exactement comp code>. li>
ul> Le code suivant doit faire exactement cela: p> xxx pré> p>
L'approche habituelle consiste à rechercher en place: qui peut être modifié si vous n'êtes pas préoccupé par les allumettes qui se chevauchent (c'est-à-dire à la recherche de toutes les occurrences de "LL" dans la chaîne "LLLL", la réponse pourrait être 3, que l'algorithme ci-dessus donnera, ou cela pourrait être 2, si vous ne laissez pas le prochain match de chevaucher le premier. Pour ce faire, changez simplement ++ POS < / code> à pos + = petit.size () code> Pour reprendre la recherche après la correspondance précédente. P> P>
Avez-vous essayé de progresser dans votre code avec un débogueur, tout en enquêtant sur les valeurs, des variables, à chaque étape d'exécution?
Pourquoi appelez-vous
substr code> surcomp code>?