0

基本上,我正在寻找一种将数组的内容(例如:短语)设置为要比较的单个单词的方法。所以当用户输入数据时,我可以知道它们有多少个相同长度的单词。

void main(){
     char array[30];
     int length, cont, array_tokens;
     printf("enter a phrase: ");
     scanf("%[^\n]s", array); //or gets(array); which ever one you like
     /*-------------------------
      *******magic happens*******
     ---------------------------*/
     for(int i=0; i<wordcount;i++)
         printf("%d word(s) with %d letters was entered", array_tokens, cont);//some sort of 
     system("pause");                                                      //counter which came 
}                                                                         //with the magic that 
                                                                         //happened before

所以结果应该是:

输入一个短语:用户输入了一个具有相似长词的短语

输入了 1 个单词和 1 个字母

输入了 2 个包含 4 个字母的单词

输入了 1 个包含 5 个字母的单词

输入了 3 个包含 6 个字母的单词

输入了 1 个包含 7 个字母的单词

4

3 回答 3

1

好吧, strtok() 是解决这个问题的一种方法。如果你的目标是效率(你应该),你应该编写一个循环来遍历句子中的字母。计算自最后一个空格以来遇到的非空格字符的数量,并在获得空格时更新 n-letter-word-frequency 数组。我本可以编写代码来执行此操作,但是当您自己编写工作代码时,我不想剥夺您的满足感。:P

于 2013-07-01T19:51:55.820 回答
0

您可以有一个数组计数,其中count[i]是长度为i的单词数。

Set count to 0
Set t to 0
for(int i=0;i<given_phrase.length();i++)
{
 if(given_phrase[i]==' ')
 {
   count[t]++;
   t=0;
 }
 else
 {
   t++;
 }
}

对于 C,只需检查短语结尾的 '\0'。然后您可以根据计数显示结果。

于 2013-07-01T20:01:03.603 回答
0

您需要将句子拆分为tokens(在本例中为单个单词)delimiter(在本例中为空格字符 '')。有多种方法可以做到这一点。一个好的老式 C 方法是strtok按照 Robert Harvey 的建议使用,它由 C 标准库提供。它的工作原理是传入要拆分的字符串,然后是拆分字符串的分隔符。

然后,要计算相似长度的单词,尝试使用不同单词长度的整数变量(或者更简单地在一种频率数组中,每个索引表示该长度的单词,其值是它们出现的计数),循环所有单词标记,当遇到一个长度的单词时增加相应的变量。要获取 C 样式字符串的长度,请尝试strlen.

于 2013-07-01T19:31:49.787 回答