题目:将一句话的单词进行倒置,标点不倒置,例如:I like Beijing. 倒置后变成Beijing. like I
输入描述:输入一个仅包含小写字母,空格,‘.'的字符串,长度不超过100,'.'只出现在最后一个单词的末尾。
输入:I like Beijing.
输出:Beijing. like I
💭 注意:
字符串输入时,不能使用scanf函数,应该使用gets来输入字符串,因为scanf函数遇到空格就会停止读取。
![](https://img-blog.csdnimg.cn/img_convert/1f1d2a2ccea98340420dcbbd9d4bcd99.png)
![](https://img-blog.csdnimg.cn/img_convert/2f6d04fcf117f6298172e243c23cbb99.png)
思路:
1.先将字符串逆序,“I like Beijing.“变成“.gnijieB ekil I"。之后将每个单词逆序,最后得到我们的结果。“Beijing. like I”
逆序字符串操作:
![](https://img-blog.csdnimg.cn/img_convert/66fe5d2ebff052b3f397c934cd5cf071.png)
#include <assert.h>
#include <string.h>
void reverse(char* left, char* right)
{
assert(left && right);//用assert断言,保证指针有效
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;//地址+1或者-1都是指向下一个字符
right--;
}
}
int main()
{
char arr[101] = { 0 };
gets(arr);
int len = strlen(arr);
//逆序整个字符串
reverse(arr, arr + len - 1);//起始地址+字符个数-1就是最后一个字符的地址
printf("%s", arr);
return 0;
}
2.逆序每一个单词
![](https://img-blog.csdnimg.cn/img_convert/ec4d3d10fd96237d1ac692bae9c4b1d9.png)
逆序每一个单词实质上也是继续执行上述字符串逆序的操作。而执行字符串逆序操作的基本就是我们要找到要逆序这一部分单词的起始地址和终止地址。
char* cur = arr;//数组名就是首元素地址
while (*cur)//循环条件不为\0
{
char* start = cur;//记录起始地址
while (*cur != ' '&&*cur!='\0')
{
cur++;//找到空格,空格前面就是我们要逆序的第一个单词
}
reverse(start, cur - 1);//逆序单词
if(*cur==' ')
cur++;//继续向下逆序单词
}
很重要!!!
在这里要特别强调,本人在写这里时犯糊涂了!!!
![](https://img-blog.csdnimg.cn/img_convert/08137d4ceb5479ae48c3ef238bcb83b0.png)
整体代码:
#include <assert.h>
#include <string.h>
void reverse(char* left, char* right)
{
assert(left && right);//用assert断言,保证指针有效
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;//地址+1或者-1都是指向下一个字符
right--;
}
}
int main()
{
char arr[101] = { 0 };
gets(arr);
int len = strlen(arr);
//逆序整个字符串
reverse(arr, arr + len - 1);//起始地址+字符个数-1就是最后一个字符的地址
char* cur = arr;//数组名就是首元素地址
while (*cur)//循环条件不为\0
{
char* start = cur;//记录起始地址
while (*cur != ' '&&*cur!='\0')
{
cur++;//找到空格,空格前面就是我们要逆序的第一个单词
}
reverse(start, cur - 1);//逆序单词
if(*cur==' ')
cur++;//继续向下逆序单词
}
printf("%s", arr);
return 0;
}