题目
Cpp
【问题描述】
输入一个由若干个以空格分隔的单词组成的英文文章,求文章中最短的单词(文章以英文句点”.”结束,且字符数不超过200).
【输入格式】
一行,表示输入的英文文章。
【输出格式】
一行,表示最短单词
【输入样例】
We are Oiers.
【输出样例】
We
【数据范围】
英文文章字符数不超过200
思路
非常非常简单,既然单词都是用空格隔开,那么就可以直接循环输入了。
代码
-
框架
int main(){ return 0; }
-
循环输入
#include<cstdio> //scanf() char a[256]; int main(){ while(true){ scanf("%s", &a); } return 0; }
-
判断长度并赋值。
因为要保证第一次可以赋新值,所以先将数组改变大小。#include<cstdio> //scanf() #include<cstring> //memset(), strlen(), strcpy() char a[256], b[256]; int main(){ memset(b, 1, sizeof(b)); while(true){ scanf("%s", &a); if(strlen(b)>strlen(a)){ strcpy(a, b); } } return 0; }
-
如果发现了句点就退出循环,并输出。
#include<cstdio> //scanf(), printf() #include<cstring> //memset(), strlen(), strcpy() char a[256], b[256]; int main(){ memset(b, 1, sizeof(b)); while(true){ scanf("%s", &a); if(a[strlen(a)-1]=='.'){ a[strlen(a)-1]='\0'; if(strlen(b)>strlen(a)){ strcpy(b, a); } break; } if(strlen(b)>strlen(a)){ strcpy(a, b); } } printf("%s", a); return 0; }
答案
#include<cstdio>
#include<cstring>
char a[256], b[256];
int main(){
memset(b, 1, sizeof(b));
while(true){
scanf("%s", &a);
if(a[strlen(a)-1]=='.'){
a[strlen(a)-1]='\0';
if(strlen(b)>strlen(a)){
strcpy(b, a);
}
break;
}
if(strlen(b)>strlen(a)){
strcpy(a, b);
}
}
printf("%s", a);
return 0;
}