2010-03-30 7 views
1

Je me demandais comment pourrais-je correspondre à la chaîne "Just" dans str1 si str1 contient les chaînes suivantes:strstr correspondant à la première occurrence de c

"this is Just/1.1.249.4021 a test" 
// "Just" will always be the same 

Je suis en train de le faire correspondre à l'aide strstr mais jusqu'à présent, il a gagné » t correspondance en raison de la /...

Des suggestions sur la façon de faire correspondre? Merci

+0

Est-ce que cela compile réellement? Il semble que vous ayez un littéral de chaîne invalide - '\ 2323' n'est pas un code d'échappement valide AFAIK. – EMP

+1

@Evgeny: \ 2323 est un échappement octal valide \ 232 suivi du chiffre 3. –

+0

Désolé, la chaîne devrait être comme: Just/1.1.249.4021 – David78

Répondre

2

Cela fonctionne pour moi - et vous?

#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
    char haystack[] = "this is just\2323 a test"; 
    char needle[] = "just"; 
    char *loc = strstr(haystack, needle); 
    if (loc == 0) 
     printf("Did not find <<%s>> in <<%s>>\n", needle, haystack); 
    else 
     printf("Found <<%s>> in <<%s> at <<%s>>\n", needle, haystack, loc); 
    return(0); 
} 
+0

Désolé, la chaîne doit être comme: Just/1.1.249.4021 – David78

+0

La norme C++ indique que les littéraux de chaîne sont de type "tableau de constchar", il est donc recommandé de les déclarer comme const char * –

+3

@rep_movsd: yes, mais Je ne déclare aucun littéral de chaîne. Je déclare deux tableaux de variables avec des initialisateurs pratiques. D'accord, je pourrais les faire const; il n'y a absolument aucune obligation de le faire, et je pourrais modifier les cordes (avec soin) si je le voulais. –

1

Quelque chose doit être mal avec la façon dont vous utilisez strstr() Le code suivant fonctionne très bien ...

const char *s = "this is just\2323 a test"; 
char *p = strstr(s, "just"); 
if(p) 
    printf("Found 'just' at index %d\n", (int)(p - s)); 
-1

Si la chaîne est en fait "Just/1.1.249.4021" il serait impossible de trouver "juste", car strstr est sensible à la casse. Si vous avez besoin d'une version insensible à la casse, vous devez écrire la vôtre ou Google pour une implémentation existante.

Questions connexes