PTA:7-26 單詞長度 (15分)

博主不定期更新【保研/推免、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的測試點逐漸添加修改的,暫時沒有想到更流暢的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章