1. 程式人生 > >C語言單詞的翻轉問題

C語言單詞的翻轉問題

最近一直在做PTA的程式設計題,發現這些小程式還是蠻有意思的。關於單詞的翻轉:在英文句子中,翻轉句子而英文單詞的順序不變,各單詞以空字元隔開。

基本的思路是:首先翻轉整個句子,然後翻轉單詞。

個人感覺這個方法理解不難(也是從別的大佬那借鑑的)[link]https://blog.csdn.net/yansj_scu/article/details/44599567.
還有更加簡單的方法,還需要多多學習,嘻嘻!

話不多說,上程式碼。


/*
	例如:I  am a student.
*/

#include <stdio.h>
#include <string.h>

void TurnSentence(char *str, int start, int end);
void TurnWords(char *str, int n);
void Turn(char *str, int n);

void Turn(char *str, int n)
{
	TurnSentence(str,  0, n-1);
	//TurnWords(str, n);
}

void TurnSentence(char *str, int start, int end)//翻轉整個句子,則為:tneduts a ma I
{
	char temp;
	while(start < end)
	{
		temp = str[start];
		str[start++] = str[end];
		str[end--] = temp;
	}
}

void TurnWords(char *str, int n)//翻轉每一個單詞 
{
	int i = 0;
	int j = 0;
	int k = 0;
	for (i = 0; i < n; i++)
	{
		if (str[i] != ' ')
		{
			j++;
		}
		else
		{
			TurnSentence(str, k, j - 1);
			k = ++j;
		}
		if (i == n-1)//最後一個單詞沒有空字元所以要加上這一步,來翻轉最後一個單詞。
		{
			TurnSentence(str, k, j - 1);
		}
	
		
	}
	
}


int main(void)
{
	char str[100]; 
	int s;
	gets(str);
	s = strlen(str);
	Turn(str, s);
	puts(str);
	return 0;
}