es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas en el código:

    1. La matriz strcp no está inicializada, lo que significa que puede contener valores basura que pueden afectar la comparación con la matriz sbstr.
    2. 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.

    3. 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:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
       char str[30] = "the test string";
       char sbstr[30] = "test";
       char strcp[30] = {0}; // Inicializar a cero
       int len = strlen(str);
       int i = 0;
       int p = 0;
    
       while (i < len)
       {
           int j = 0; // Comenzar a copiar desde el principio de la matriz strcp
           while (str[i] != '\0' && str[i] != ' ') // Incluir todos los caracteres hasta el espacio o el carácter nulo
           {
                 strcp[j++] = str[i++];
           }
           strcp[j] = '\0'; // Colocar un carácter nulo al final de la cadena copiada
    
           p = strcmp(sbstr, strcp);
    
           if (p == 0)
           {
               printf("exist\n"); // Agregar un carácter de nueva línea
               break;
           }
    
           ++i;
       }
    
       return 0;
    }
    

    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 incrementa i 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>

Comments are closed.