J'essaie de vérifier si une chaîne contient une sous-chaîne en C comme:
char *sent = "this is my sample example";
char *word = "sample";
if (/* sentence contains word */) {
/* .. */
}
Quel est quelque chose à utiliser à la place de string::find
C ++?
strchr
.Réponses:
Notez que
strstr
renvoie un pointeur vers le début du mot danssent
si le motword
est trouvé.la source
strstr
renvoie un pointeur; J'aime être explicite lorsque je teste des pointeurs.false
est0
strcasestr
fait la même chose mais ignore la casse.strstr
dans la glibc ici: github.com/lattera/glibc/blob/master/string/strstr.c . Elle est beaucoup plus optimisée qu'une implémentation naïve - et probablement plus rapide qu'une simple fonction auto-définie. Néanmoins, en cas de doute, référence.Utilisez
strstr
pour cela.http://www.cplusplus.com/reference/clibrary/cstring/strstr/
Alors, tu l'écrirais comme ...
la source
Essayez d'utiliser des pointeurs ...
la source
Vous pouvez essayer celui-ci à la fois pour rechercher la présence de la sous-chaîne et pour l'extraire et l'imprimer:
la source
if(strcmp((ret=strstr(mainstring,substring)),substring))
est incorrect: il ne correspond quesubstring
s'il s'agit d'un suffixe demainstring
. Le reste de la fonction est une manière alambiquée d'écrireprintf("and the sub string is:::%s\n", substring);
.Ce code implémente la logique du fonctionnement de la recherche (l'une des méthodes) sans utiliser de fonction prête à l'emploi:
la source
Et voici comment signaler la position du premier caractère de la sous-chaîne trouvée:
Remplacez cette ligne dans le code ci-dessus:
avec:
la source
Ma propre solution humble (sensible à la casse):
Résultats
Testé sur ATmega328P (avr8-gnu-toolchain-3.5.4.1709);)
la source
La même chose sera obtenue avec ce code plus simple: Pourquoi les utiliser:
Mais la partie délicate serait de signaler à quelle position dans la chaîne d'origine la sous-chaîne commence ...
la source
la source
Je crois avoir la réponse la plus simple. Vous n'avez pas besoin de la bibliothèque string.h dans ce programme, ni de la bibliothèque stdbool.h. L'utilisation simple de pointeurs et d'arithmétique de pointeurs vous aidera à devenir un meilleur programmeur C.
Renvoyez simplement 0 pour False (aucune sous-chaîne trouvée), ou 1 pour True (oui, une sous-chaîne "sub" se trouve dans la chaîne globale "str"):
la source
char a[3] = "asd"; char b[2] = "as"; is_substr(a, b);
chaînes d'entrée ne sont pas terminées par NUL, vous surchargez donc le tableau.char a[4] = "asd"; char b[3]= "as"; is_substr(a+4, b);
strnstr()
existe (au moins sur libbsd)Utilisation de C - Pas de fonctions intégrées
string_contains () fait tout le gros du travail et retourne 1 index basé. Le repos sont des codes de conducteur et d'assistance.
Attribuez un pointeur à la chaîne principale et à la sous-chaîne, incrémentez le pointeur de sous-chaîne lors de la mise en correspondance, arrêtez la boucle lorsque le pointeur de sous-chaîne est égal à la longueur de la sous-chaîne.
read_line () - Un petit code bonus pour lire l'entrée de l'utilisateur sans prédéfinir la taille de l'entrée que l'utilisateur doit fournir.
la source
la source