Частота слова в строке - PullRequest
       1

Частота слова в строке

0 голосов
/ 29 декабря 2018

Хорошо, я решал свое задание, и в этой конкретной программе вывод слова «say» отображается как 1, хотя это происходит дважды.Может ли кто-нибудь помочь мне здесь?

//Start
    # include <stdio.h>
    # include <string.h>
    int main()
    {
     char Str[100]="Martha! Why did you say that name? Please! Stop! Why did 
                    you say that name?", Words[100][100], Temp[100];
  int i, j, k, n, Count;
  j=k=0;
  //Accepting input
  //gets(Str);
  Str[strlen(Str)]='\0';
  //Copying Each and every word into a 2-D Array from the string
   for(i=0;Str[i]!='\0';i++)
    {
     if(Str[i]==' ')
      {
       Words[j][k]='\0';
       k=0;
       j++;
      }
     else
      {
       Words[j][k++]=Str[i];
      }
    }
  Words[j][k] = '\0'; //Null character for last word
  n=j;
  //Sorting the array of words
  for(i=0;i<n-1;i++)
   {
    for(j=i+1;j<n;j++)
     {
      if(strcmp(Words[i], Words[j])>0)
       {
         strcpy(Temp, Words[i]);
         strcpy(Words[i], Words[j]);
         strcpy(Words[j], Temp);
       }
     }
   }
  printf("\n");
  //Displaying frequecncy of each word

   for(i=0;i<n;i+=Count) //Incrementing by count to process the next word
    {
     Count=1;
       {
        for(j=i+1;j<=n;j++)
          {
           if(strcmp(Words[i], Words[j])==0)
            {
             Count++;
            }
          }
       }
      printf("%s\t%d\n", Words[i], Count); //Count is used to display the frequecncy of each word
    }
  printf("\n");
  return 0;
}//End

Вот вывод:

Martha! 1

Please! 1

Stop!   1

Why     2

did     2

name?   2

**say     1**

that    2

you     2

Как видите, на выходе отображается частота слова «скажем»'один, хотя это происходит в строке дважды. Проверить связь для выхода на терминале?

1 Ответ

0 голосов
/ 29 декабря 2018

n настроен неправильно.

При n = j; концептуально это должно быть n = j+1;, чтобы n представлял n слов, а не последний индекс.

// n = j;
n = j+1;

Без вышеуказанного изменения массив не полностью отсортирован, так как n обрабатывается как количество слов, но он слишком мал 1.

Неправильно отсортированный массив равен

Martha!, Please!, Stop!, Why, Why, did, did, name?, say, say, that, that, you, you, name?

Неполная сортировка и теперь использование n в качестве последнего индекса испортило подсчет частоты, так как "name?" был найден дважды, но не в последовательном порядке - таким образом, перепрыгивая через первую "say".

// for (j = i + 1; j <= n; j++) {
for (j = i + 1; j < n; j++) {

Исправлен вывод кода

Martha! 1
Please! 1
Stop!   1
Why 2
did 2
name?   2
say 2
that    2
you 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...