[C题目]输入一句英文句子,将所有单词顺序颠倒然后输出。

输入

I am little biter.

输出

biter.  little am I 

方法1

思路:将每一个单词存入二维数组的行中,倒序输出二维数组的每一行。

#include
int main()
{
	char arr[30] = { 0 };//创建一位数组存储输入的句子
	gets(arr);//输入字符串
	char arr1[10][10] = { 0 };//创建二维数组存储每一个单词
	int x = 0, y = 0;//x表示二维数组的行数,y表示二维数组的列数
	for (int i = 0; arr[i] != '\0'; i++)//逐个遍历输入的字符串中的每一个字符,知道遇到'\0'停止。
	{
		if (arr[i] == ' ')//遇到空格表示一个单词结束,换二维数组的下一行存储下一个单词。
		{
			i++;//++后才是空格后面的字符
			x++;
			y = 0;
		}
		arr1[x][y] = arr[i];
		y++;
	}
	for (int i = x; i >= 0; i--)
	{
		printf("%s ", arr1[i]);
	}
	return 0;
}

方法2

思路:将整个句子逆序,再逐个逆序每一个单词。

#include
void func(char* left, char* right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };//创建一位数组存储输入的字符串
	gets(arr);//输入字符串
	int i = 0;
	while(*(arr + i) != '\0')//计算字符串有多少个字符
	{
		i++;
	}
	func(arr, arr + i - 1);//先将整个字符串逆序,arr字符串第一个元素地址,arr+i-1是字符串最后一个元素地址。
	char* start = arr;//将第一个单词的首字符地址赋值给start。
	while (1)
	{
		int j = 0;
		while (*(start + j) != ' ' && *(start + j) != '\0')//计算单词有几个字符
		{
			j++;
		}
		char* end = start + j - 1;//end是单词最后一个字符的地址
		func(start, end);
		start = end + 2;//下一个单词的首字符地址
		if (*(end + 1) == '\0')//出现某个单词最后一个字符的后面是'\0'时结束循环
			break;
	}
	printf("%s", arr);
	return 0;
}

你可能感兴趣的:(c语言)