3:最长单词2
总时间限制: 1000ms 内存限制: 65536kB
描述
一个以’.‘结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
输入
一个以’.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。
输出
该句子中最长的单词。如果多于一个,则输出第一个
样例输入
I am a student of Peking University.
样例输出
University
PS:这道题是统计单词个数的一个变种,整体思路一致,就是如何利用空格去统计下一个单词的开始或者上一个单词的结束。
#include<iostream>
#include<cstring> //strlen
#include<cstdio> //gets, gets用法介绍:https://blog.csdn.net/libing403/article/details/73010866
using namespace std;
int main()
{
char str[500];
cin.getline(str,500,'.'); //数据缓冲区中的指针指在结束符后面
//cout<<str<<endl;
bool flag=0;// 1表示前一个字符是空格,0表示前一个字符是当前单词
int num=0,maxLen=0;//记录当前单词的长度,最长的单词长度,均初始化为0
char words[20]={0},maxWords[20]={0};//记录当前单词和 最长的单词
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
{
if(maxLen<num)
{
maxLen=num;
strcpy(maxWords,words);
}
num=0;
}
else
{
//cout<<str[i]<<endl;
words[num]=str[i];
num++;
}
}
//对于最后一个单词,因为不会有if(str[i]==' ')这一步的判断,可以最后拿出来单独判断
if(maxLen<num)
{
maxLen=num;
strcpy(maxWords,words);
}
cout<<maxWords;
return 0;
}
运行结果