235 votes

Vérifier l'existence d'une sous-chaîne dans une chaîne en C

J'essaie de vérifier si une chaîne de caractères contient une sous-chaîne en C comme :

char *sent = "this is my sample example";
char *word = "sample";
if (/* sentence contains word */) {
    /* .. */
}

Que peut-on utiliser à la place de string::find en C++ ?

376voto

nneonneo Points 56821
if (strstr(sent, word) != NULL) {
    /* ... */
}

Notez que strstr renvoie un pointeur vers le début du mot dans le fichier sent si le mot word est trouvé.

39voto

Tim Points 2158

Utilisez strstr pour ça.

http://www.cplusplus.com/reference/clibrary/cstring/strstr/

Donc, vous l'écrivez comme

char *sent = "this is my sample example";
char *word = "sample";

char *pch = strstr(sent, word);

if(pch)
{
    ...
}

13voto

JustVirtually Points 161

Essayez d'utiliser des pointeurs...

#include <stdio.h>
#include <string.h>

int main()
{

  char str[] = "String1 subString1 Strinstrnd subStr ing1subString";
  char sub[] = "subString";

  char *p1, *p2, *p3;
  int i=0,j=0,flag=0;

  p1 = str;
  p2 = sub;

  for(i = 0; i<strlen(str); i++)
  {
    if(*p1 == *p2)
      {
          p3 = p1;
          for(j = 0;j<strlen(sub);j++)
          {
            if(*p3 == *p2)
            {
              p3++;p2++;
            } 
            else
              break;
          }
          p2 = sub;
          if(j == strlen(sub))
          {
             flag = 1;
            printf("\nSubstring found at index : %d\n",i);
          }
      }
    p1++; 
  }
  if(flag==0)
  {
       printf("Substring NOT found");
  }
return (0);
}

8voto

jeevan Points 54

Vous pouvez essayer celui-ci à la fois pour trouver la présence de la sous-chaîne et pour l'extraire et l'imprimer :

#include <stdio.h>
#include <string.h>

int main(void)
{
    char mainstring[]="The quick brown fox jumps over the lazy dog";
    char substring[20], *ret;
    int i=0;
    puts("enter the sub string to find");
    fgets(substring, sizeof(substring), stdin);
    substring[strlen(substring)-1]='\0';
    ret=strstr(mainstring,substring);
    if(strcmp((ret=strstr(mainstring,substring)),substring))
    {
        printf("substring is present\t");
    }
    printf("and the sub string is:::");

    for(i=0;i<strlen(substring);i++)
    {
            printf("%c",*(ret+i));

    }
    puts("\n");
    return 0;
}

3voto

derlo Points 21

Et voici comment rapporter la position du premier caractère de la sous-chaîne trouvée :

Remplacez cette ligne dans le code ci-dessus :

printf("%s",substring,"\n");

avec :

printf("substring %s was found at position %d \n", substring,((int) (substring - mainstring)));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X