Verificar si una subcadena dada está presente en la cadena dada.
Debería escribir un programa en C para verificar si una subcadena dada está presente en la cadena dada. El código que escribí está abajo, pero no funciona. ¿Alguien puede decirme cuál es el problema?
“`c
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[30]="the test string";
char sbstr[30]="test";
char strcp[30];
int len = strlen(str);
int i=0;
int p=0;
while(i<len)
{
while (str[i] != '\0' && str[i] != ' ')
{
strcp[i] = str[i];
++i;
}
strcp[i] = '\0';
<pre><code> p = strcmp(sbstr, strcp);
if (p==0)
{
printf("exist");
break;
}
++i;
</code></pre>
}
}
“` {=”” while=”” (str[i]=”” !=’\0′ &&=”” str[i]=”” !=’ ‘ )=”” {=”” strcp[i]=”str[i];” ++i;=”” }=”” strcp[i]=’\0’ ;=”” p=”strcmp(sbstr,” strcp);=”” if=”” (p=”=0)” {=”” printf(“exist”);=”” break;=”” }=”” ++i;=”” }=”” }=””></len)
{
while (str[i] != ‘\0’ && str[i] != ‘ ‘)
{
strcp[i] = str[i];
++i;
}
strcp[i] = ‘\0’;
p = strcmp(sbstr, strcp);
if (p==0)
{
printf("exist");
break;
}
++i;
}
}
“`></string.h></stdio.h>
davy.ai
Hay algunos problemas en el código:
strcp
no está inicializada, lo que significa que puede contener valores basura que pueden afectar la comparación con la matrizsbstr
.Los bucles while anidados no iteran correctamente a través de la cadena de texto. El bucle interno solo se detiene cuando encuentra un espacio o un carácter nulo, pero esto significa que se perderán cualquier carácter no alfabético, como la puntuación.
El bucle externo incrementa
i
dos veces en cada iteración, lo que significa que está saltando cada segundo carácter en la cadena de texto.Para solucionar estos problemas, puedes cambiar el código de la siguiente manera:
Este código inicializa la matriz
strcp
a cero, incluye todos los caracteres en el bucle interno hasta que alcanza un espacio o un carácter nulo, e incrementai
solo una vez por iteración. También agrega un carácter de nueva línea después del mensaje de salida para mayor claridad.</string.h></stdio.h>