【C语言刷题】倒置字符串

解题思路与过程

  • ️解题思路
  • ️解题过程
    • 1.输入
    • 2.设计逆序函数
    • 3.逆序整个字符串
    • 4.逆序每个单词
  • ️源码

【C语言刷题】倒置字符串_第1张图片
先来看题
【C语言刷题】倒置字符串_第2张图片

️解题思路

首先我们定义一个字符数组来存放字符串,然后用 gets函数来读入字符串,接下来进行处理阶段,设计一个逆序函数逆序整个字符串,然后再逆序每个单词,最后处理一下细节再输出

️解题过程

1.输入

定义完一个字符数组后,因为scanf不吃空格符和换行符,所以这里输入我们采用gets函数来进行读入字符串,看代码

int main()
{
	char arr[101] = { 0 };
	//输入
	gets(arr);

2.设计逆序函数

看代码

void reverse(char* left, char* right)
{
	assert(*left != NULL);
	assert(*right != NULL);

	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

☝️字符串的首尾元素逐个进行交换(不包括\0)☝️

因为传过来的是数组首元素地址,所以我们要用指针变量来接收,为了代码更谨慎,这里使用了assert断言,防止遇到空指针而导致程序运行错误(不能忘记引头文件)

3.逆序整个字符串

	int len = strlen(arr);
	//逆序整个字符串
	reverse(arr, arr + len - 1);

我们使用strlen函数来计算字符串元素个数(不要忘记引头文件),然后调用 reverse函数进行整个字符串的逆置。
这里的 arr + len - 1是首元素地址+字符串长度(整数)- 1 得到的是末尾元素的地址如果不 - 1指向的就是 ’\0‘了

4.逆序每个单词

char* cur = arr;
	while (*cur)
	{
		//找一个单词
		char* start = cur;
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
		}
		reverse(start, cur - 1);
		if (*cur == ' ')
		{
			cur++;
		}
	}

定义一个指针变量cur来接收逆序整个字符串之后的arr数组首元素地址,然后如果cur指向的字符不是’\0’的话就进入循环,然后再定义一个指针变量start来接收每个单词的首元素地址,然后进入循环判断如果cur指向的不是空格或者’\0’就往后跳一个字符,直到cur指向的是空格或者’\0‘了,就说明已经遍历完确认了一个单词,然后进入reverse函数 来逆序单词(cur - 1 是因为如果不 -1,cur指向的是空格或者’\0‘
最后如果cur指向的是空格而不是’\0‘就说明还没有结束,还有单词没有逆序完,往后跳一个字符循环继续

最后打印输出

️源码

#include
#include
#include

void reverse(char* left, char* right)
{
	assert(*left != NULL);
	assert(*right != NULL);

	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[101] = { 0 };
	//输入
	gets(arr);
	//处理
	int len = strlen(arr);
	//逆序整个字符串
	reverse(arr, arr + len - 1);
	//逆序每个单词
	char* cur = arr;
	while (*cur)
	{
		//找一个单词
		char* start = cur;
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
		}
		reverse(start, cur - 1);
		if (*cur == ' ')
		{
			cur++;
		}
	}
	//打印
	printf("%s\n", arr);

	return 0;
}

希望大家能够理解!

总结
本文章旨在【C语言刷题】专栏,感兴趣的烙铁可以订阅本专栏哦
希望我们可以做一个用心的人
小的会继续学习,继续努力带来更好的作品
创作写文不易,还多请各位大佬uu们多多支持哦

【C语言刷题】倒置字符串_第3张图片

你可能感兴趣的:(C语言刷题,c语言,数据结构,算法,刷题)