栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】字符串倒置

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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指向’’时,也需要停下,并把end - 1传给函数,最后要把’’即end现在指向的位置赋给start指针(而不是end+1),作为字符串结束的标志。

二、代码实现
#include
#include
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!='')
		{
			end++;
		}
		//循环结束后end指针指向空格
		//逆序每个单词.gnijieb->beijing.
		reverse(start, end - 1);
		if (*end == ' ')
		{
			//跳到下个单词的首元素
			start = end+1;
		}
		else
		{
			//end指向''的情况
			start = end;
		}
	}
	printf("%sn", arr);
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920248.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号