【C语言】字符串倒置

前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C、C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷题练习,点击链接牛客网刷题入口


题目

输入一个字符串,例:I like beijing.
输出结果:beijing. like I

一、算法思路

1.暴力求解法:准备一个新数组,从后往前遍历,找到空格后,将单词放在新数组中,然后依次寻找,不建议采用;

2.正确的算法思想:
(1)先将字符串全部逆序
.gnijieb ekil I
(2)再逆序每个单词
beijing. like I

1.我们需要准备一个逆序字符串的函数,用来逆序所有字符串和每个单词字符串,准备两个函数参数接收字符串的首元素地址和最后一个元素的地址。然后利用逆序字符串的算法进行逆序,利用left和right两个指针,满足left < right这个条件。
2.主函数中需要准备一个起点指针指向字符串首元素地址,还需要创建一个辅助指针end指向最后一个元素的地址,当end指针指向空格的时候就停下,然后将end - 1指向的最后一个元素的地址传给函数,逆序完后,把end + 1的字符赋给start,作为未逆序的单词的首元素地址,后面的同理;而当end指向’\0’时,也需要停下,并把end - 1传给函数,最后要把’\0’即end现在指向的位置赋给start指针(而不是end+1),作为字符串结束的标志。

二、代码实现

#include<stdio.h>
#include<string.h>
void reverse(char* left, char* right)
{
	//1.逆序所有字符
	//2.逆序每个单词.gnijieb->beijing.
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[20] = { 0 };
	gets(arr);//I like beijing.
	int len = strlen(arr);
	//1.把全部字符串逆序
	//传字符串的首地址,和最后一个元素的地址
	reverse(arr, arr + len - 1);
	//2.再逆序每个单词
	//也是传每个字符串的首元素地址和最后一个元素的地址
	//需要辅助指针,指向最后一个元素的地址
	char* start = arr;
	while (*start)
	{
		char* end = start;
		while (*end != ' '&&*end!='\0')
		{
			end++;
		}
		//循环结束后end指针指向空格
		//逆序每个单词.gnijieb->beijing.
		reverse(start, end - 1);
		if (*end == ' ')
		{
			//跳到下个单词的首元素
			start = end+1;
		}
		else
		{
			//end指向'\0'的情况
			start = end;
		}
	}
	printf("%s\n", arr);
	return 0;
}
  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_麦子熟了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值