输入
输出
方法1
#include<stdio.h>
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<stdio.h>
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;
}