方法一:(极其复杂)
#include <stdio.h>
int main(){
int len=0,i=0,flag=1,tag=0;
char c,s[100];
while(i<100){
scanf("%c",&c);
s[i]=c;
if(c=='.')
break;
i++;
}
for(int j=0;j<i;j++){
if(s[j]!=' '){
len++;
flag=1;
}
else if(flag&&s[j]==' '&&s[j+1]!=' '&&s[j+1]!='.'&&len>0){
printf("%d ",len);
len=0;
flag=0;
}
}
if(len>0)
printf("%d",len);
return 0;
}
方法二:
#include <stdio.h>
int main(){
int len=0;
char c;
int head=1; //是否第一个单词;
while((c=getchar())!='.'){
if(c!=' ')
len++;
else if(len>0){
if(head){ //遇到第一个单词,要修改head标识
printf("%d",len);
head=0;
}
else //不是第一个单词,中间添加空格
printf(" %d",len);
len=0;
}
}
if(len>0&&head) //如果只有一个单词(且为第一个单词)
printf("%d",len);
else if(len>0) //不止一个单词,同时最后的'.'前不是空格
printf(" %d",len);
return 0;
}
本文对比了两种高效的方法:一种通过逐字符扫描并计数非空字符,另一种利用标志判断单词位置。第一种适用于处理文本中的单词数量,第二种则更简洁地处理首单词和后续单词的空格问题。
8万+

被折叠的 条评论
为什么被折叠?



