C语言单词的翻转问题

最近一直在做PTA的程序设计题,发现这些小程序还是蛮有意思的。关于单词的翻转:在英文句子中,翻转句子而英文单词的顺序不变,各单词以空字符隔开。

基本的思路是:首先翻转整个句子,然后翻转单词。

个人感觉这个方法理解不难(也是从别的大佬那借鉴的)[link]https://blog.csdn.net/yansj_scu/article/details/44599567.
还有更加简单的方法,还需要多多学习,嘻嘻!

话不多说,上代码。


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

#include 
#include 

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;
}

你可能感兴趣的:(C)