使用fgets依次读入每行内容,注意行尾的换行符'\n'也会读入
先判断读入的内容是否为"stop\n",是的话即跳出循环,停止输入
对于读入的该行字符串,使用while函数依次遍历每个字符
以空格作为单词的间隔统计每个单词的长度,保存其中最长的单词及对应的起始下标
最后输出每行单词的长度之和、每行最长单词即可
C代码如下:
运行结果如下:
输出符合样例,望采纳~
附源码:
#include <stdio.h>
#include <string.h>
#define N 105
int main() {
char s[N];
int i, j, cnts, start, maxlen, len;
while (1) {
memset(s, 0, N); // 初始化字符数组
fgets(s, N, stdin);
if (strcmp(s, "stop\n") == 0)
break; // 输入stop停止,注意fgets会读入'\n'
i = 0; cnts = 0; start = 0; maxlen = 0;
while (s[i] != '\n') {
len = 0; // 统计每个单词的长度
while (s[i] != '\n' && s[i] != ' ') {
len++;
i++;
}
cnts += len;
if (len > maxlen) {
maxlen = len; // 保存最长单词的长度
start = i - len; // i-1-start+1=len,保存最长单词的起始下标
}
if (s[i] == '\n')
break; // 到达行尾
while (s[i] == ' ') // 跳过单词间的空格
i++;
}
printf("%d ", cnts);
for (j = start; j < start + maxlen; j++) // 输出最长单词
printf("%c", s[j]);
printf("\n");
}
return 0;
}
按照题目要求编写的C语言程序如下
#include<stdio.h>
#include<string.h>
int main(){
char a[100],max[100],stop[]="stop";
char *temp,*find;
int maxlen=0,len,sum=0;
fgets(a,100,stdin);
find=strchr(a,'\n');
if(find) *find='\0';
while(strcmp(a,stop)!=0){
temp=strtok(a," ");
maxlen=0;
sum=0;
while(temp){
len=strlen(temp);
if(len>maxlen){
maxlen=len;
strcpy(max,temp);
}
sum=sum+len;
temp=strtok(NULL," ");
}
printf("%d %s\n",sum,max);
fgets(a,100,stdin);
find=strchr(a,'\n');
if(find) *find='\0';
}
return 0;
}
#include<string.h>
int main(){
char s[100]="",s_longest[100]="";
int length=0;
do{
length+=strlen(s);
if(strlen(s)>strlen(s_longest)){
strcpy(s_longest,s);
}
scanf("%s",s);
}while(strcmp(s,"stop");
printf("%d %s",length,s_longest);
return 0;
}