2012-11-19 17 views
3

Par exemple, j'ai:Comment rechercher une chaîne dans un tableau char en C?

char buff[1000]; 

Je veux rechercher si la chaîne « hassasin » est dans ce tableau de caractères. Voici ce que j'ai essayé.

char word[8] = "hassasin"; 
char Buffer[1000]=sdfhksfhkasd/./.fjka(hassasin)hdkjfakjsdfhkksjdfhkjh....etc 
int k=0; 
int t=0; 
int len=0; 
int sor=0; 
for (k=0; k<1000; k++){ 
    for (t=0; t<8; t++){ 
     if (Buffer[k]==word[t]) len++; 
     if (len==8) "it founds 0.9.1" 
    } 
} 
+2

vous devriez essayer d'écrire votre propre code et demande alors si vous n » t succès. – Maroun

+0

J'ai essayé mais je ne pouvais pas trouver la vraie réponse – hassasin

+6

Je ne sais pas combien de fois j'ai rencontré "Fermé ... Cette question est peu susceptible d'aider les futurs visiteurs" et la réponse a été très utile. – Dermot

Répondre

2

si le chararray contient stringEnd ou ne se termine pas avec \ 0, vous pouvez utiliser ce code, car strstr freinera sur ceux-ci:

#include <stdio.h> 
int main() 
{ 
    char c_to_search[5] = "asdf"; 

    char text[68] = "hello my name is \0 there is some other string behind it \n\0 asdf"; 

    int pos_search = 0; 
    int pos_text = 0; 
    int len_search = 4; 
    int len_text = 67; 
    for (pos_text = 0; pos_text < len_text - len_search;++pos_text) 
    { 
     if(text[pos_text] == c_to_search[pos_search]) 
     { 
      ++pos_search; 
      if(pos_search == len_search) 
      { 
       // match 
       printf("match from %d to %d\n",pos_text-len_search,pos_text); 
       return; 
      } 
     } 
     else 
     { 
      pos_text -=pos_search; 
      pos_search = 0; 
     } 
    } 
    // no match 
    printf("no match\n"); 
    return 0; 
} 

http://ideone.com/2In3mr

+0

ok mais je pense que ce code trouve la chaîne même s'il y a d'autres éléments entre les lettres nécessaires. dans ma recherche, je veux trouver le mot exact, pas d'autres lettres entre eux. comment dois-je le faire? – hassasin

+0

ce code recherche exactement le même mot. si vous voulez rechercher avec des espaces autour de vous pouvez rechercher "asdf" – phschoen

+0

je ne l'obtiens pas chaque fois qu'il trouve une lettre correspondante, il fait ++ pos_search. il ne doit pas être successif et quand il atteint 4 il dit que j'ai trouvé. – hassasin

19

Oui, vous pouvez simplement utiliser strstr pour cela:

#include <stdlib.h> 
#include <string.h> 

char buff[1000]; 
char *s; 

s = strstr(buff, "hassasin");  // search for string "hassasin" in buff 
if (s != NULL)      // if successful then s now points at "hassasin" 
{ 
    printf("Found string at index = %d\n", s - buff); 
}         // index of "hassasin" in buff can be found by pointer subtraction 
else 
{ 
    printf("String not found\n"); // `strstr` returns NULL if search string not found 
} 
+0

merci. Y a-t-il un moyen de le faire manuellement? sans utiliser de méthodes? – hassasin

+3

Oui, bien sûr - si c'est pour un exercice de devoirs, alors vous pouvez simplement implémenter 'strstr' vous-même - c'est une fonction très simple et vous apprendrez beaucoup en cours d'écriture. –

Questions connexes