【漫步刷题路】- 逆序字符串II
【摘要】 🚀题目要求:字符串:I love you逆序后结果: you love me 🥇逆置法假设逆置: Man Max->整体逆置: xaM naM->分别逆置 对xaM逆置:Max 对naM逆置:Man->最终结果为: Max Man🚖思路:先整体逆置定义两个指针,一个start,一个end,end负责移动。遇到字符串的空格就停下来,逆置[...
🚀题目要求:
字符串:I love you
逆序后结果: you love me
🥇逆置法
假设逆置: Man Max
->整体逆置: xaM naM
->分别逆置 对xaM逆置:Max
对naM逆置:Man
->最终结果为: Max Man
🚖思路:
-
先整体逆置
-
定义两个指针,一个start,一个end,end负责移动。遇到字符串的空格就停下来,逆置[start,end-1]区间字符的内容 然后end和start指向end+1的位置。再继续寻找空格
-
当end遇到的是\0,说明已经到了字符串的尾了,退出循环
🥫图解
🍔代码
#include<stdio.h>
#include<assert.h>
#include<string.h>
//区间逆置
void reverse(char* left, char* right)
{
assert(left && right);
while (left < right)
{
char str = *right;
*right = *left;
*left = str;
right--;
left++;
}
}
int main()
{
char str[100] = "Chase the wisdom 99";
int len = strlen(str);
//1.先整体逆置
reverse(str, str + len - 1);
//2.分别逆置,以空格为分隔
char* end = str;
char* start = str;
//循环判断条件:end指向的字符不是\0
while (*end != '\0')
{
//当end没有遇到\0 和空格就继续
while ( (*end != '\0') && (*end != ' '))
{
end++;
}
//当end跳出循环时,指向的就是空格或者\0 逆置[start,end-1]的内容
reverse(start, end-1);
//end向后移动,进行下一次循环
//start从end位置开始,重新定义起始区间
end++;
start = end;
}
printf(str);
return 0;
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)