将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
依次输出倒置之后的字符串,以空格分割
示例1
I like beijing.
beijing. like I
思路分析
通过观察得知,先对整个字符串逆序,后对字符串中每一个单词逆序便可解决此问题。
如图所示
注意事项
不能使用scanf,因为scanf一遇到空格就中止,可以使用gets();或者 gets_s();
gets_s()的使用
首先将字符串逆序独立成一个逆序字符的函数
*str为字符串首地址,right为字符串中最后一个字母的下标,
void reseve(char* str, int left, int right)
{
while (left < right)
{
char ch = str[left];
str[left] = str[right];//交换字符串
str[right] = ch;
left++;
right--;
}
}
其次对字符串中的每一个单词进行逆序
int temp = 0;//数组首元素的下标
for (int i = 0; i < len + 1; i++).//遍历字符串
{
if (arr[i] == ' ' || arr[i] == 0)//遇到空格或者\0就需要单词逆序
{
reseve(arr, temp, i - 1);//调用逆序数组, i为空格或者\0的下标 i-1为单词最后一个字母的下标
temp = i + 1;//下一个单词的第一个字母的下标
}
}
#include<string.h>
#include<stdio.h>
void reseve(char* str, int left, int right)
{
while (left < right)
{
char ch = str[left];
str[left] = str[right];
str[right] = ch;
left++;
right--;
}
}
int main()
{
char arr[100] = { 0 };
gets_s(arr,100);
int len = strlen(arr);
reseve(arr, 0, len - 1);
int temp = 0;
for (int i = 0; i < len + 1; i++)
{
if (arr[i] == ' ' || arr[i] == 0)
{
reseve(arr, temp, i - 1);
temp = i + 1;
}
}
printf("%s", arr);
return 0;
}