Comprobar subserie existe en una cadena en C

Estoy tratando de verificar si una cadena contiene una subcadena en C como:

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

¿Qué es algo para usar en lugar de string::find en C ++?

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

Tenga en cuenta que strstr devuelve un puntero al inicio de la palabra en sent si se encuentra la palabra word .

Use strstr para esto.

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

Entonces, lo escribirías como ..

 char *sent = "this is my sample example"; char *word = "sample"; char *pch = strstr(sent, word); if(pch) { ... } 

Intenta usar punteros …

 #include  #include  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 

Puede probar esto tanto para encontrar la presencia de la subcadena como para extraerla e imprimirla:

 #include  #include  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 

Este código implementa la lógica de cómo funciona la búsqueda (una de las formas) sin usar ninguna función preconfigurada:

 public int findSubString(char[] original, char[] searchString) { int returnCode = 0; //0-not found, -1 -error in imput, 1-found int counter = 0; int ctr = 0; if (original.Length < 1 || (original.Length) 0) { if ((original[ctr]) == searchString[0]) { counter = 0; for (int count = ctr; count < (ctr + searchString.Length); count++) { if (original[count] == searchString[counter]) { counter++; } else { counter = 0; break; } } if (counter == (searchString.Length)) { returnCode = 1; } } ctr++; } return returnCode; } 

Y aquí está cómo informar la posición del primer personaje fuera de la subcadena encontrada:

Reemplace esta línea en el código anterior:

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

con:

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

Lo mismo se logrará con este código más simple: ¿Por qué usar estos:

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

Pero la parte difícil sería informar en qué posición de la cadena original comienza la subcadena …

 My code to find out if substring is exist in string or not // input ( first line -->> string , 2nd lin ->>> no. of queries for substring following n lines -->> string to check if substring or not.. #include  int len,len1; int isSubstring(char *s, char *sub,int i,int j) { int ans =0; for(;i 

Creo que tengo la respuesta más simple. No necesita la biblioteca string.h en este progtwig, ni la biblioteca stdbool.h. El simple hecho de utilizar punteros y aritmética de puntero lo ayudará a convertirse en un mejor progtwigdor de C.

Simplemente devuelve 0 para False (no se encuentra ninguna subcadena), o 1 para True (sí, una subcadena “sub” se encuentra dentro de la cadena general “str”):

 #include  int is_substr(char *str, char *sub) { int num_matches = 0; int sub_size = 0; // If there are as many matches as there are characters in sub, then a substring exists. while (*sub != '\0') { sub_size++; sub++; } sub = sub - sub_size; // Reset pointer to original place. while (*str != '\0') { while (*sub == *str && *sub != '\0') { num_matches++; sub++; str++; } if (num_matches == sub_size) { return 1; } num_matches = 0; // Reset counter to 0 whenever a difference is found. str++; } return 0; } 
 #include  #include  int findSubstr(char *inpText, char *pattern); int main() { printf("Hello, World!\n"); char *Text = "This is my sample program"; char *pattern = "sample"; int pos = findSubstr(Text, pattern); if (pos > -1) { printf("Found the substring at position %d \n", pos); } else printf("No match found \n"); return 0; } int findSubstr(char *inpText, char *pattern) { int inplen = strlen(inpText); while (inpText != NULL) { char *remTxt = inpText; char *remPat = pattern; if (strlen(remTxt) < strlen(remPat)) { /* printf ("length issue remTxt %s \nremPath %s \n", remTxt, remPat); */ return -1; } while (*remTxt++ == *remPat++) { printf("remTxt %s \nremPath %s \n", remTxt, remPat); if (*remPat == '\0') { printf ("match found \n"); return inplen - strlen(inpText+1); } if (remTxt == NULL) { return -1; } } remPat = pattern; inpText++; } }