【漫步刷题路】- 逆序字符串I

举报
芒果_Mango 发表于 2022/01/11 10:06:57 2022/01/11
【摘要】 每天坚持"划水"!One day one question 题目要求:如:字符串内容为:abcd 逆序后结果:dcba 注意事项:不能逆序指针指向的常量字符串!因为常量字符串存放在静态区,其内容不能修改。要使用字符数组//例如char* p = "abcd";//不能逆序p指向的内容思路:1.定义两个指针,一个指向字符串的左边,一个指向字符串的右边。二者指向的字符进行...

每天坚持"划水"!
One day one question

题目要求:

如:字符串内容为:abcd 逆序后结果:dcba


注意事项:

不能逆序指针指向的常量字符串!因为常量字符串存放在静态区,其内容不能修改

要使用字符数组

//例如
char* p = "abcd";//不能逆序p指向的内容

思路:

1.定义两个指针,一个指向字符串的左边,一个指向字符串的右边。二者指向的字符进行交换。左指针右移,右指针左移

2.当满足left < right 条件则继续交换 不满足则说明二者相遇了,或者left>right了。逆序完成


image.png

代码:

void reverse(char* str)
{
	int len = strlen(str);
	char* left = str;//指向字符串的起始位置
	char* right = str + len -1 ;//指向字符串的末尾(\0之前)
    
    //当left和right指向同一个字符不需要交换,所以判断条件写成left<=right即可
	while (left < right)
	{
        //字符交换
		char tmp = *left;
		*left = *right;
		*right = tmp;
        //区间缩减
		right--;
		left++;
	}
}
int main()
{
	char str[20] = "abcd";
	reverse(str);
	printf("%s\n", str);
	return 0;
}

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。