题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
本题考察的内容有多组输入,以及一些字符串函数的运用。本题的思路比较简单,就是讲每一个字符串的长度求出来,然后在比较每一个字符串的长度,并分类存储。因为一般的输入遇到空格便会停止输入,所以输入时不要用scanf,或者cin,可以用gets(),fgets(),或者getline,注意,c++中的getline不能直接给数组赋值,可以用string定义一个str,然后直接将str当做数组来用。接下来便是单词存放的问题了,我用的是二维数组,每一行存一个单词,然后列存相应的字母。在使用二维数组时,可以直接以一维数组形式读取单词。例如:
m y n a m e i s A m y
这是在二维数组中存放时的形式,a[0]=“my”;a[1]=“name”;像这样便能实现单词的读取。
最后补充一点,记得数组使用后的及时清零,以及变量的清零。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char str[1000];
char word[1000][200];
char word2[1000][200];
int geshu[1000];
int number[1000];
int main()
{
int num=0,len=0,nums=0,j=0;
while(strcmp(str,"stop")){
memset(str,'0',sizeof(str));
gets(str);
for(int i=0;str[i]!='\0';i++){
if(str[i]!=' '){
word[num][len]=str[i];
len++;
nums++;
}
else{
num++;
len=0;
}
}
len=0;
for(int i=0;i<=num;i++){
number[i]=strlen(word[i]);
}
int max=number[0],inmax=0;
for(int i=0;i<=num;i++){
if(number[i]>max){
max=number[i];
inmax=i;
}
}
geshu[j]=nums;
strcpy(word2[j],word[inmax]);
j++;
nums=0;
num=0;
memset(word,0,sizeof(word));
memset(number,0,sizeof(number));;
}
for(int i=0;i<j-1;i++){
printf("%d %s\n",geshu[i],word2[i]);
}
return 0;
}
版权声明:本文为qq_50949298原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。