C语言刷题之倒置字符串的解题全过程

 更新时间:2023年02月20日 12:36:19   作者:C-调战士  
这篇文章主要给大家介绍了关于C语言刷题之倒置字符串的解题全过程,这是一道我们经常刷到的实战题目,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

先来看题

解题思路

🔴 首先我们定义一个字符数组来存放字符串,然后用 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断言,防止遇到空指针而导致程序运行错误(不能忘记引头文件<assert.h>)

3.逆序整个字符串

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

👉我们使用strlen函数来计算字符串元素个数(不要忘记引头文件<string.h>),然后调用 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<stdio.h>
#include<string.h>
#include<assert.h>

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语言刷题之倒置字符串的文章就介绍到这了,更多相关C语言倒置字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Windows API实现遍历所有文件并删除的方法

    基于Windows API实现遍历所有文件并删除的方法

    这篇文章主要介绍了基于Windows API实现遍历所有文件并删除的方法,是win32应用程序的一个比较典型的文件操作应用技巧,需要的朋友可以参考下
    2015-04-04
  • 浅谈头文件algorithm中的常用函数

    浅谈头文件algorithm中的常用函数

    下面小编就为大家带来一篇浅谈头文件algorithm中的常用函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 详解C语言进程同步机制

    详解C语言进程同步机制

    这篇文章主要介绍了详解C语言进程同步机制的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Visual studio setup.exe 安装vs2022报错的解决方案

    Visual studio setup.exe 安装vs2022报错的解决方案

    这篇文章主要介绍了Visual studio setup.exe 安装vs2022报错的解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • C++ GetDlgItem用法案例详解

    C++ GetDlgItem用法案例详解

    这篇文章主要介绍了C++ GetDlgItem用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言程序打豆豆(函数版)

    C语言程序打豆豆(函数版)

    今天小编就为大家分享一篇关于C语言程序打豆豆(函数版),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C++实现添加图片水印到PDF文档

    C++实现添加图片水印到PDF文档

    水印是显示在文档内容后面的淡色文字或图片,可以用于指示文档的状态(保密、草稿等),本文主要为大家介绍了如何使用 Spire.PDF for C++ 在 PDF 文档中添加图片水印,需要的可以参考下
    2023-11-11
  • c语言求出给定范围内的所有质数

    c语言求出给定范围内的所有质数

    本文主要介绍了c语言求出给定范围内的所有质数的小程序。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • C/C++ int数与多枚举值互转的实现

    C/C++ int数与多枚举值互转的实现

    在C/C++在C/C++的开发中经常会遇到各种数据类型互转的情况,本文主要介绍了C/C++ int数与多枚举值互转的实现,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法的非递归实现与递归实现的方法(C++)

    本篇文章是对全排列算法的非递归实现与递归实现的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论