用c语言编写一个程序。

读入一系列字符数组,寻找连续重复出现的单词。程序应该找出满足以下条件的单词的输入位置:该单词的后面紧跟着再次出现自己本身。跟踪重复次数最多的单词及其重复次数。输出重复次数的最大值,若没有单词重复则输出说明信息。例如,如果输入是:
how , now now now brown cow cow 则输出应表明“now”这个单词出现了三次。

“该单词的后面紧跟着再次出现自己本身”怎么理解?大体说说思路,你得有个算法判断什么样的字符串算一个“单词”,可根据ASCII码,单词中可以有大小写字母,空格(\r,\t,\n),其他字符(&、*、……)都可以分隔单词。    

输入一个字符串,程序算法切割为“单词”,存入链表或者数据库,再读入之后查询链表或者数据库,记录重复次数 。 

将一个单词定义为不包含空白字符(即没有空格、制表符或者换行符)的一系列字符,比如“googoogxf”和"s2t2"都是单词(单词中可以有数字,linux 下 vim的查找功能就基本以这种方法)。每个单词以首次遇到的非空白字符开始,在下一个空白字符出现时结束。检测空白字符比较简单的是用 ctype.h 中的isspace()函数。 

========================================================

我刚才理解有错误 贴出自己的代码,函数功能,输入一串字符串,统计其中有重复的单词并输出重复次数,间隔的重复情况未考虑,

#include <stdio.h>

#include <string.h>

int main(int argc, char *argv[])

{

char input[200]; //存储从键盘输入的内容

char *str = " \n"; //以空格或者换行符(最后一个回车)割字符

char *word_buf[50]; //指针数组 存放各个单词

printf("请输入字符串,各字符串以空格分隔:\n");

if(fgets(input, 200, stdin) == NULL) //从标准输入读入字符存储到input

{

perror("fgets"); //读入出错则返回 结束程序

return 0;

}

int i = 0, word_count = 1; //word_count为单词重复数

word_buf[i] = strtok(input, str);

while(word_buf[i] != NULL)

{

i++;

word_buf[i] = strtok(NULL, str); //strtok函数切割字符串 

if(word_buf[i] == NULL) //如果到最后的换行符,退出循环,执行最后的if语句

{

break;

}

  if(strcmp(word_buf[i],word_buf[i-1]) == 0) //判断当前单词跟上一个单词是否相等

{

word_count++; //如果当前单词跟上一个单词相同 则word_count累加

}

else

{

if(word_count >= 2) //如果不相等 则判断之前的单词是否有重复,有则打印

{

printf("重复单词:%s 该单词最大连续重复数:%d\n",

word_buf[i-1],word_count);

}

word_count = 1;//由于当前单词跟上一个单词不相等,故重复数统计变量重新设置

}

}

if(word_count >= 2) //退出循环后的判断语句,\n之前的单词有重复则打印

{

printf("重复单词:%s 该单词最大连续重复数:%d\n",

word_buf[i-1],word_count);

}

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-07
同问,怎么算是单词,scanf()是用空格和换行符隔开单词,gets()是用换行隔开的。
还有就是, 。算是单词吗?比如:
how , , , , , now
是否应该输出, 5呢?
相似回答