你的程序要读入一行文本,其中以空格分隔为若干个单词,以.
结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's
算一个单词,长度为4。注意,行中可能出现连续的空格;最后的'.'不计算在内。
输入格式:
输入在一行中给出一行文本,以.
结束
提示:用scanf("%c",...);
来读入一个字符,直到读到.
为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It's great to see you here.
输出样例:
4 5 2 3 3 4
因为不知道要输入的字符串到底有多长所以使用while循环,边输入边判断,当读到'.'的时候结束循环即可。需要注意几点:开头有空格、结尾有空格、中间有连续多个空格以及空句子。
代码如下:
#include<stdio.h>
int main()
{
char c[10000];
int i;
int flag;
int tag;
tag=0;
i=0;
flag=0;
while(1)
{
scanf("%c",&c[i]);
if(c[i]==' ')//读到空格时进行判断
{
if(i==0)//如果首位为空格,则跳过
{
i++;
continue;
}
if(i>0&&c[i-1]==' ')//如果此空格并非首位,且前一位也为空格,则跳过
{
i++;
continue;
}
else if(i>0&&c[i-1]!=' ')//如果此空格并非首位,且前一位不为空格,则进行输出和判断
{
if(tag==1)//并非第一次输出的时候,先输出一个空格
{
printf(" ");
}
printf("%d",flag);
tag=1;//输出一次后令tag为1
flag=0;//计数器重置
i++;
continue;
}
}
if(c[i]=='.')//当读到.后进入结尾判断
{
if(flag==0)//如果此时计数器为零,则直接结束循环
{
break;
}
if(tag==1)//如果计数器非零且不是第一次输出,则先输出空格,再输出计数
{
printf(" ");
}
printf("%d\n",flag);
break;//读到'.'后结束循环
}
flag++;//若读到的不是空格和'.',则计数器++
i++;
}
return 0;
}