博主不定期更新【保研/推免、C/C++、5G移動通信、Linux、生活隨筆】系列文章,喜歡的朋友【點贊+關注】支持一下吧!
你的程序要讀入一行文本,其中以空格分隔爲若干個單詞,以.
結束。你要輸出每個單詞的長度。這裏的單詞與語言無關,可以包括各種符號,比如it's
算一個單詞,長度爲4。注意,行中可能出現連續的空格;最後的.
不計算在內。
輸入格式:
輸入在一行中給出一行文本,以.
結束
輸出格式:
在一行中輸出這行文本對應的單詞的長度,每個長度之間以空格隔開,行末沒有最後的空格。
輸入樣例:
It's great to see you here.
輸出樣例:
4 5 2 3 3 4
#include <stdio.h>
int main()
{
char a[1000];
int i=0;
scanf("%c", &a[i]);
int n=0; //n用來記數單詞長度,此處n初始化爲0是由於讀入空格時會增加n的值,所以讀第一個字符時,n初始化爲0
int b[1000]={0};
int j=0;
/*排除開頭空格的影響*/
while (a[i] == ' ')
{
scanf("%c", &a[i]);
}
while (a[i] != '.') //讀入單詞,到.結束
{
i++;
scanf("%c", &a[i]);
n++;
/*判斷是否出現“ ”或“.” ,出現後將該單詞長度n記錄下來,之後重置n*/
if (a[i] == ' ' || a[i] == '.')
{
if (n>0) //避免連續多個空格影響輸出
{
b[j++]=n;
}
n = -1; //此處重置n的值,用來記數下一個單詞長度,此時還未開始讀字符,初始值應設爲-1,讀入一個字符後,n就變成了0,同第8行。
}
}
/*輸出結果,並通過數組判斷是否到達最後一個單詞,以避免末尾多出空格*/
for (j=0;j<1000;j++)
{
if (b[j]>0)
{
printf("%d", b[j]);
if (b[j+1]>0) //如果b[j]不是最後一個數,則輸出空格
{
printf(" ");
}
}
}
return 0;
}
本題難點在於格式的要求,以及輸入的各種變化(例如行首,行間,行尾多空格)。我的思路似乎有點亂,因爲程序是根據OJ的測試點逐漸添加修改的,暫時沒有想到更流暢的方法。