1. 程式人生 > >顛倒句子中的單詞順序

顛倒句子中的單詞順序

題目內容:

從鍵盤輸入一個句子(假設字元數小於100個),句子中的單詞之間用空格分隔,句子必須以一個標點符號作為結尾,句子開頭和末尾標點符號前均沒有空格,以回車表示輸入結束,請程式設計顛倒句中的單詞順序並輸出。

函式原型:int Inverse(char str1[], char str2[][N])

程式執行結果示例1:

Input a sentence:you can cage a swallow can’t you?↙

you can’t swallow a cage can you?

程式執行結果示例2:

Input a string:you are my sunshine!↙

sunshine my are you!

程式執行結果示例3:

Input a sentence:I love you!↙

you love I!

輸入提示資訊:“Input a sentence:”

輸入格式: 用gets()函式

輸出格式

每個單詞的輸出格式:"%s " (注意: %s後面有一個空格)

最後一個單詞和標點符號的輸出格式:"%s%c\n"

方法1(陣列)

#include<stdio.h>
#include<string.h>
#define N 100
int Inverse(char str1[], char
str2[][N]); int main() { char str1[N],str2[N][N],a; int i=0,j; gets(str1); a=str1[strlen(str1)-1]; //將字串在結尾處的標點符號儲存起來。 str1[strlen(str1)-1]='\0'; //將str1陣列變成了沒有標點符號的字串,由此排除了標點符號的干擾。 j=Inverse(str1,str2); for(i=j;i>0;i--) { printf("%s ",str2[i]); }
printf("%s%c\n",str2[i],a); return 0; } int Inverse(char str1[], char str2[][N]) //此函式的功能是將輸入的一維陣列每個單詞拆開存進二維陣列中,返回值為單詞個數。 { int len=strlen(str1); int i=0,j=0,k=0; while(str1[i]!='\0') { k=0; while(str1[i]!=' '&&str1[i]!='\0') { str2[j][k]=str1[i]; k++; i++; } if(str1[i]=='\0') break; str2[j][k]='\0'; j++; i++; } return j; }

方法2(指標)

#include <stdio.h>
#include <string.h>
char *R(char *str, int len);
char *RS(char *str);
int main()
{
	char str[100], c;
	printf("Input a sentence:");
	gets(str);
	c =	str[strlen(str) - 1];
	str[strlen(str) - 1] = '\0';
	printf("%s%c\n", RS(str), c);
	return 0;
}

char *R(char *str, int len)             //將句子所有的字母顛倒順序
	char *pLast = str + len - 1;
	char *pBegin = str;
	char temp;
	while (pBegin < pLast)
	{
		temp = *pBegin;
		*pBegin = *pLast;
		*pLast = temp;
		pBegin++;
		pLast--;
	}
	return str;
}

char *RS(char *str)
{
	char *pBegin = str;
	char *pEnd = str;
	R(str, strlen(str));                       //先將輸入的一句話的所有字母全部顛倒順序
	while (*pEnd != '\0')
	{
		while (*pEnd != '\0' && *pEnd != ' ')
		{
			pEnd++;
		}
		R(pBegin, pEnd - pBegin);           //將每個單詞中的字母顛倒順序,這樣就變成了之前的順序
		if(*pEnd == '\0')
		{
			break;
		}
		pEnd++;
		pBegin = pEnd;
	}
	return str;
}