用strcmp比较令牌

时间:2013-10-29 19:05:51

标签: c arrays string

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

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;

2 个答案:

答案 0 :(得分:2)

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

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

  3. 你的嵌套for循环如下:

    for (k=0; k < i-1; k++)
    {
      for (j=k+1; j < i; j++)
      { 
        ...
      }
    }
    

答案 1 :(得分:1)

我意识到这是一个老问题,但我发现@ elgonzo的答案很有帮助,并且能够在一些其他更改之后让您的程序编译。我添加了库,将\n添加到print语句中,并初始化了可能属于您的问题的变量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;
    }