【题目描述】
一个以‘.’结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式。
【输入】
一个以‘.’结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。
【输出】
该句子中最长的单词。如果多于一个,则输出第一个。
【输入样例】
I am a student of Peking University.
【输出样例】
University
话不多说,直接上代码。
C++:
#include<bits/stdc++.h> using namespace std; int main() { string s1,s2,s3; //三个string类的字符串类型 int count=0; //用来比较单词的长度 do { cin>>s1; s3=s1; //借助第三方 if(s3[s3.size()-1]=='.') //遇到带有.的单词时抹去 s3[s3.size()-1]='\0'; if(s3.size()>count) //比较单词长度 { s2=s3; count=s3.size(); } }while(s1[s1.size()-1]!='.'); //知道最后一个单词的最后出现. cout<<s2; }
C语言:
#include<stdio.h> #include<string.h> int main() { char c[501]; fgets(c,501,stdin); //使用fgets()来输入字符串 /*gets(c); */ //因为gets()输入不安全所以建议少用,现在用gest输入在信奥赛中是无法通过的 int count=0; //计算每个单词的长度 int max=0; //表示最长单词的长度 int pos1,pos2; //pos1表示单词的起始位置,pos2表示单词的末位置 for(int i=0;i<strlen(c);i++) //循环遍历 { if(c[i]!=' '&&c[i]!='.') //没遇到空格或者.的时候就表示是同一个单词 count++; else { if(count>max) //如果该单词的长度大于max { max=count; //重新初始化max pos1=i-count; //寻找该单词的初始位置 pos2=i-1; //寻找末位置 } count=0; //赋值为0开始下一个单词的长度计数 } } for(int i=pos1;i<=pos2;i++) printf("%c",c[i]); //输出第一次出现的最长的单词 }
好啦,本题就到此结束啦!在此,我建议大家学C的同时学习C++,遇到字符问题的时候使用C++是能够更快更方便的解决的!