字符串倒置(整个英文单词倒置)

目录

 一.思路分析

二.代码展示与讲解

1.整体倒置

2.单个单词倒置

三.完整代码展示

四.总结


前言:如下图,我们一般而言的字符串倒置,都是像第二句一样完完整整的倒置,但是你知道像第三种这种,整个单词都倒置是怎么实现的吗,下面我们就来讲解一下如何实现。

 一.思路分析

看到这种题,我们首先想到的就是将整个字符串倒置,但是却不知道,怎么实现这种完整单词的倒置,那我们换位思考一下,是不是能在整体倒置的基础上,再来实现单个单词的再倒置呢?

二.代码展示与讲解

1.整体倒置

#include<stdio.h>
#include<string.h>
void Inversion(char* start,char* end)//实现整体倒置
{
	while (start < end)
	{
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);//用grts()函数接收字符串更方便
	int len = strlen(arr);
	Inversion(arr, arr + len - 1);
	printf("%s\n", arr);
	return 0;
}

我们先实现了对整个字符串的倒置,将字符串的首,尾元素的地址传入,这样更容易进行倒置操作,也更利于我们接下来将单个单词的倒置。

2.单个单词倒置

void InversionWord(char* arr)
{
	while (*arr)
	{
		char* left = arr;//定义指针来接收单词的最左边元素
		while (*arr != ' ' && *arr != '\0')
		{
			arr++;
		}
		char* right = arr - 1;//定义指针来接收单词的最右边元素
		Inversion(left, right);//将单词的左右元素地址传入实现单个单词倒置
		if (*arr == ' ')
			arr++;
	}
}

我们定义一个新函数,并创建指针形参来接收数组的首元素地址,用最外层的while循环来控制——当指针走到字符串末尾'\0'时,终止循环

我们知道,两个单词之间是有一个空格的,这便是我们判断单词末尾的标志,所以我们用内层while循环来控制。先定义left指针来接收单词的首元素地址,当指针没有走到' '或者'\0'的时候,我们的指针就一直往下走,遇见则停止。此时指针的指向的是' ',要减1才是单词右元素的地址,定义right指针来接收,再嵌套使用倒置函数就实现了单词的倒置,同时再用arr++将指针从指向' '移动到下一个单词的首字母

这里要注意一点,当我们走到字符串最后一个元素时,内置while循环会实现arr++,此时指针指向了‘\0’,但是调用倒置函数之后,arr还会再++,这样arr指向的就不是‘\0’了,这样循环就不会终止,因此我们要使用if判断语句进行判断,只有当arr指向' '的时候,我们才往后移动。

三.完整代码展示

#include<stdio.h>
#include<string.h>
void Inversion(char* start,char* end)
{
	while (start < end)
	{
		char temp = *start;
		*start = *end;
		*end = temp;
		start++;
		end--;
	}
}

void InversionWord(char* arr)
{
	while (*arr)
	{
		char* left = arr;
		while (*arr != ' ' && *arr != '\0')
		{
			arr++;
		}
		char* right = arr - 1;
		Inversion(left, right);//实现单词倒置
		if (*arr == ' ')
			arr++;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);
	int len = strlen(arr);
	Inversion(arr, arr + len - 1);
	InversionWord(arr);
	printf("%s\n", arr);
	return 0;
}

四.总结

当然这道题肯定不止这一种做法,如果小伙伴们还有其他更加简单便捷的做法,欢迎评论私信。

最后,喜欢博主文章的小伙伴不要忘记一键三连哦,我们下期再见!

猜你喜欢

转载自blog.csdn.net/2303_78442132/article/details/132152553