问题:
在进行文章重复度检查时,经常需要统计一段英文中的单词数量,并找出长度最长的单词。
设有如下定义:char str[500];
编写程序,通过利用cin.getline(str,500);实现从键盘输入一小段英文(其中可以包含空格,但在同一行),利用函数统计该段英文中包含几个单词,输出统计出的单词数量、最长单词的长度以及长度最长的单词,空格隔开。
注意:函数声明使用void split(char *str);如果有最长的单词不只一个,输出最先找到的那个。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
void split(char*str);
int main()
{
char str[500];
cin.getline(str,500);
split(str);
return 0;
}
//如果有最长的单词不只一个,输出最先找到的那个
void split(char*str)
{
//tempw为最长单词在word数组中的位置,templ为最长单词的长度
int tempw=0,templ=0,i=0,m=0,n=0;
//将分割后的单词存入word数组
char word[500][500];
//当该段英文没有结束时
while(str[i]!='\0')
{
//当遇到空格时,当前为一个单词
if(str[i]==' ')
{
//比较当前单词长度与templ,若当前单词长度大于templ,则将m赋值给tempw,n赋值给templ
if(n>templ)
{
tempw=m;
templ=n;
}
//当前单词分割完成,分割下一个单词
m++;
n=0;
}
//没遇到空格时,即当前单词没有完成分割
else
{
//记录单词
word[m][n]=str[i];
n++;
}
i++;
}
cout<<"单词的数量:"<<++m<<endl;
cout<<"最长单词的长度:"<<templ<<endl;
cout<<"长度最长的第一个单词:";
for(int j=0;j<templ;j++)
{
cout<<word[tempw][j];
}
}
运行结果: