2013-02-10 1 views
0

J'ai une chaîne et j'essaie de savoir si c'est une sous-chaîne dans un autre mot.en utilisant la fonction de chaîne strncmp c-style

Par exemple (pseudocode)

say I have string "pp" 

and I want to compare it (using strncmp) to 

happy 
apples 
pizza 

and if it finds a match it'll replace the "pp" with "xx" 
changing the words to 

haxxles 
axxles 
pizza 

est-ce possible en utilisant strncmp?

+0

Oui, c'est possible. –

+0

Pour élaborer: vous pouvez utiliser une boucle sur la chaîne d'entrée et 'strncmp' à chaque position pour voir si vous avez une correspondance. C'est un peu plus de code que la solution 'strstr', mais ça marchera. – nneonneo

Répondre

4

Pas directement avec strncmp, mais vous pouvez le faire avec strstr:

char s1[] = "happy"; 

char *pos = strstr(s1, "pp"); 
if(pos != NULL) 
    memcpy(pos, "xx", 2); 

Cela ne fonctionne que si la recherche et remplacer les chaînes sont de la même longueur. Si ce n'est pas le cas, vous devrez utiliser memmove et potentiellement allouer une plus grande chaîne pour stocker le résultat.

+0

Merci beaucoup! Après tout ce que j'ai appris au semestre dernier, il me semble qu'il me reste encore beaucoup à faire. Je n'ai jamais utilisé strstr, et je n'ai jamais utilisé memcpy. Merci encore. – juice

+0

Il est tout à fait possible d'utiliser 'strncmp' pour y parvenir - c'est plus facile avec strstr, mais c'est une autre affaire. –

+0

À noter: même si ce sont des chaînes, nous n'utilisons pas 'strcpy' car cela est destiné à copier des chaînes entières (y compris leurs terminaisons NULL). – nneonneo

1

Pas avec strncmp. Vous avez besoin de strstr, c'est-à-dire

char happy = "happy"; 
char *s = strstr(happy, "pp"); 
if (s) memcpy(s, "xx", 2); 
+0

Impossible d'utiliser une chaîne constante ... – nneonneo

+0

@nneonneo - Vous avez raison - ne pas penser. –

Questions connexes