La ejecución del progtwig varía a medida que el tamaño de I / P aumenta más allá de 5 en C

Esta es la pregunta.

Para las dos cadenas A y B, definimos la similitud de las cadenas como la longitud del prefijo más largo común a ambas cadenas. Por ejemplo, la similitud de las cadenas “abc” y “abd” es 2, mientras que la similitud de las cadenas “aaa” y “aaab” es 3. Calcule la sum de las similitudes de una cadena S con cada uno de sus sufijos.

Entrada: La primera línea contiene el número de casos de prueba T. Cada una de las siguientes líneas T contiene una cadena cada una.

Salida: líneas T de salida que contienen la respuesta para el caso de prueba correspondiente.

Restricciones: 1 <= T <= 10 La longitud de cada cadena es a lo sumo 100000 y contiene solo caracteres en minúscula.

Entrada de muestra: 2 ababaa aa

Salida de muestra: 11 3

Explicación: Para el primer caso, los sufijos de la cadena son “ababaa”, “babaa”, “abaa”, “baa”, “aa” y “a”. Las similitudes de cada una de estas cadenas con la cadena “ababaa” son 6,0,3,0,1,1 respectivamente. Por lo tanto, la respuesta es 6 + 0 + 3 + 0 + 1 + 1 = 11.

El problema al que me estoy enfrentando: está funcionando correctamente para casos de prueba menores de 5. Para 5 y más allá de 5, la salida de la primera cadena se imprime como 0. Para la depuración, utilicé una variable de carácter k para encontrar el valor señalado por los punteros k tenía los valores -54, -56 y otros valores al calcular la primera cadena. Está funcionando correctamente para otras cadenas excepto la primera.

Incluso intenté imprimir la primera cadena. Se está imprimiendo algún valor de basura. Pero se está imprimiendo correctamente para los casos de prueba <5. He dado el código a continuación. Por favor, ayúdame.

#include #include #include int main() { int test_cases,i,j,*count; char k; //for testing purpose to determine the character at each iteration scanf("%d",&test_cases); count = calloc(test_cases,sizeof(int)); char **strings, *initial_ptr, *current_ptr, *start_ptr; strings = malloc(test_cases); for(i=0;i<test_cases;i++) { strings[i] = malloc(100000); scanf("%s",strings[i]); } initial_ptr = start_ptr = *strings; current_ptr = *strings; //testing printf("This is the first string: "); puts(strings[0]); int temp_count=0; for(i=0;i<test_cases;i++) { current_ptr = initial_ptr = start_ptr = *(strings+i); temp_count=0; for(j=0;j= 'a') && (*current_ptr <= 'z')) { if(*current_ptr == *initial_ptr) { temp_count++; current_ptr++; initial_ptr++; } else { start_ptr++; current_ptr = start_ptr ; initial_ptr = *(strings+i) ; } } current_ptr = start_ptr; count[i]=temp_count; } } for(i=0;i<test_cases;i++) { printf("\n%d",count[i]); } return 0; } 

 count = (int *)calloc(test_cases*sizeof(int),0); 

no tiene sentido. El segundo parámetro en calloc es el tamaño de los elementos que está asignando. Esa llamada debe leer:

 count = calloc(test_cases, sizeof(int)); 

Este también está equivocado:

 strings = (char **) malloc(test_cases); 

debiera ser:

 strings = malloc(test_cases*sizeof(char*)); 

Esta:

 printf("This is the first string: "); puts(strings[1]); 

Es engañoso: imprime la segunda cadena.