用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;
}