0

我需要比较令牌。我需要知道两个相等的令牌。这是我的代码。比较时出了点问题——编译器崩溃了。你能帮我找出错误吗?

int main()    
{
    int i=0;
    char* words[200];
    char text[200];

    printf("Enter one sentence \n ");
    gets(text);
    char *word = strtok(text, " ");

    while(word!=0)
    {
        words[i++] = strdup(word);
        printf("[%s]\n", word);
        word=strtok(NULL, " ,.!?");
    }






for (k=0; k<199; k++)
{
 for (j=k+1; j<200; j++)
  { 
             if (strcmp(words[k],words[j])==0) 
             {
             printf("Equal words are %s",words);
             }
             else
             {
             printf("In this sentence aren't equal words");
             }
   }

} 
  getch();
        return 0;
4

2 回答 2

2
  1. 在您的 for 循环中,您迭代直到 200,直到达到输入单词的最大数量(i)。

  2. 无法保证未初始化数组的元素在运行时将具有哪个值。它们可能是 0,但也可能是任何其他随机数。这意味着,对超出输入字数的任何数组元素执行 strcmp 将导致未定义的行为。

像这样做你的嵌套for循环:

for (k=0; k < i-1; k++)
{
  for (j=k+1; j < i; j++)
  { 
    ...
  }
}
于 2013-10-29T19:13:58.000 回答
1

我意识到这是一个老问题,但我发现@elgonzo 的回答很有帮助,并且能够在进行一些其他更改后让您的程序编译。我添加了库,添加\n到打印语句中,并初始化了变量kj这可能是您问题的一部分。

这是我的版本:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
        int i=0, k=0, j=0;
        char* words[200];
        char text[200];

        printf("Enter one sentence \n ");
        gets(text);
        char *word = strtok(text, " ");

        while(word!=0)
        {
            words[i++] = strdup(word);
            printf("[%s]\n", word);
            word=strtok(NULL, " ,.!?");
        }

        for (k=0; k < i-1; k++)
        {
         for (j=k+1; j < i; j++)
          {
              if (strcmp(words[k],words[j])==0)
              {
              printf("Equal words are %s\n", *words);
              }
              else
              {
              printf("In this sentence aren't equal words\n");
              }
          }
        }
    return 0;
    }
于 2016-11-16T01:26:20.917 回答