题目描述:
你的程序要读入一行文本,其中以空格分隔为若干个单词,以 . 结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如 it’s 算一个单词,长度为4。注意,行中可能出现连续的空格;最后的 . 不计算在内。
输入格式:
输入在一行中给出一行文本,以 . 结束
提示:用scanf("%c",…);来读入一个字符,直到读到 . 为止。
输出格式:
在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。
输入样例:
It’s great to see you here.
输出样例:
4 5 2 3 3 4
注:以上为原题描述,版权归属:
作者:翁恺
单位:浙江大学
我的思路:
直接使用指针数组存储每个单词,顺序输出每个单词的长度。注意分情况调格式。
代码实现:
#include<stdio.h>
#include<string.h>
int getString(char *str,char *strPtr[]);
int main()
{
char str[500001]={'\0'};
char *strPtr[125001]={0};
int i, num;
i = -1;
do
{
i++;
scanf("%c",&str[i]);
}while(str[i]!='.');
//num为单词的个数
num=getString(str,strPtr);
if(num>0)
{
//利用flag来判断源字符串中句号前是否有空格或输入只有句号
int flag=strlen(strPtr[num-1])-1;
//flag>0,句号前无空格,且单词与句号相邻
if(flag>0)
{
for(i=0;i<num-1;i++)
{
printf("%d ",strlen(strPtr[i]));
}
printf("%d\n",flag);
}
//flag==0,句号前有空格或输入只有句号
if(flag==0)
{
//num>1,输入有单词
if(num>1)
{
for(i=0;i<num-2;i++)
{
printf("%d ",strlen(strPtr[i]));
}
printf("%d\n",strlen(strPtr[num-2]));
}
//num==1,只有空格和句号或只有句号,不输出
}
}
return 0;
}
int getString(char *str,char *strPtr[])
{
int j;
if(*str!=' ')
{
strPtr[0] = &str[0];
j=1;
}
else
{
j=0;
}
for(int i=0;str[i]!='\0';i++)
{
if(str[i]==' ')
{
//单词的前一个空格
if(str[i+1]!='\0'&&str[i+1]!=' ')
{
strPtr[j++] = &str[i+1];
str[i]='\0';
}
//单词的后一个空格
if(i>0&&str[i-1]!=' ')
{
str[i]='\0';
}
}
}
if(j==0)
{
strPtr[0]="\0";
}
return j;
}