程序执行随着I / P大小在C中增加超过5而变化

时间:2011-12-18 13:42:17

标签: c

这是个问题。

对于两个字符串A和B,我们将字符串的相似性定义为两个字符串共有的最长前缀的长度。例如,字符串“abc”和“abd”的相似性是2,而字符串“aaa”和“aaab”的相似性是3。 计算字符串S与每个后缀的相似之和。

输入: 第一行包含测试用例T的数量。下一个T行中的每一行都包含一个字符串。

输出: 输出T行包含相应测试用例的答案。

约束: 1< = T< = 10 每个字符串的长度最多为100000,仅包含小写字符。

示例输入: 2 ababaa AA

示例输出: 11 3

说明: 对于第一种情况,字符串的后缀是“ababaa”,“babaa”,“abaa”,“baa”,“aa”和“a”。每个字符串与字符串“ababaa”的相似性分别为6,0,3,0,1,1。因此答案是6 + 0 + 3 + 0 + 1 + 1 = 11.

我面临的问题: 它适用于小于5的测试用例。对于5和超过5,第一个字符串的输出打印为0.对于调试,我使用字符变量k来查找指针指向的值。在计算第一个字符串时,k具有值-54,-56和其他值。除第一个字符串外,它对其他字符串正常工作。

我甚至试过打印第一个字符串。正在打印一些垃圾值。但它正确地打印测试用例<我已经给出了以下代码。请帮帮我。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
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<strlen(strings[i]);j++)
       {
         k = *current_ptr;
         while((*current_ptr) && (*current_ptr >= '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;

}

1 个答案:

答案 0 :(得分:2)

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

毫无意义。 calloc中的第二个参数是您要分配的元素的大小。该电话应为:

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

这个也错了:

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

应该是:

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

此:

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

具有误导性:它会打印第二个字符串。