C语言之字符串逆序函数的三种实现方式

 更新时间:2026年04月09日 10:40:33   作者:铭哥的编程日记  
文章介绍了三种字符串逆序的方法:非函数、函数非递归、函数递归,并详细解释了每种方法的代码实现和原理,最后还探讨了两次逆序打印数组的面试题,通过图解展示了逆序过程

三种方法实现字符串逆序函数

题目如下(示例):

​写一段代码实现字符串的逆序打印

例如:

输入:abcdef  输出:fedcba

一、第一种方法(非函数)

代码如下(示例):

//对一个字符串进行逆序
int main()
{
    char arr[1000] = { 0 };
    gets(arr);
    int len = strlen(arr);
    char* left = arr;
    char* right = arr + len - 1;
    while (left < right)
    {
        char* tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
    printf("%s\n", arr);
    return 0;
}

二、第二种方法(函数非递归)

1.函数的方法

代码如下(示例):

//写一个函数(非递归)实现逆序字符串
void severse_string(char* str)
{
	int len = strlen(str);
	char* left = str;
	char* right = str + len - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	severse_string(arr);
	printf("%s\n", arr);
	return 0;
}

函数和main函数原理一样!这里不做过多的介绍!

2.函数+数组的方法

代码如下(示例):

 //用数组函数的方法(非递归)实现字符串的逆序打印
void severse_string(char arr[])
{
	int len = strlen(arr);
	int left = 0;
	int right = len - 1;
	while (left < right)
	{
		char tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[] = "abcdef";
	severse_string(arr);
	printf("%s\n", arr);
	return 0;
}

三、第三种方法(函数递归)

代码如下(示例):

//用递归的(函数)的方法实现对字符串的逆序打印
void reverse_string(char* str)
{
	int len = strlen(str);
	char tmp = *str;
	*str = *(str + len - 1);
	*(str + len - 1) = '\0';

	if ((strlen(str + 1)) >= 2)
	{
		reverse_string(str + 1);
	}
	*(str + len - 1) = tmp;
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

注意:

这里的 tmp 和 len 的值可以通过调试来观察变化!如下图!

这里是函数在一步一步调用,接下来是递归返回的阶段~

第一次返回:

第二次返回:

第三次返回:

此时已经对数组全部进行逆序打印!

四、面试题:对一个数组进行两次逆序打印

题目如下(示例):

1.代码实现

代码如下(示例):

void reverse_string(char* l, char* r)
{
	while (l < r)
	{
		char tmp = *l;
		*l = *r;
		*r = tmp;
		l++;
		r--;
	}
}
int main()
{
	char arr[100] = { 0 };
	//输入数组
	gets(arr);
	//计算数组的大小
	int len = strlen(arr);
	char* left = arr;
	char* right = left + len - 1;
	reverse_string(left, right);
	//对单词进行逆序
	char* start = arr;
	char* cur = arr;
	while (*cur!='\0')
	{
		while (*cur != ' ' && *cur!='\0')
		{
			cur++;
		}
		reverse_string(start, cur - 1);
		start = cur + 1;
		if (*cur != '\0')
		{
			cur++;//cui原来是空格
		}
	}
	printf("%s\n", arr);
	return 0;
}

2.图解面试题

第一步:整体逆序字符串!

循环:第二步:对单个单词进行逆序!!!

1.将第一个字符串逆序

2.将第二个字符串逆序

总结

以上就是今天要讲的内容,本文介绍了字符串逆序函数的实现原理和相关的面试题。

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Qt Creator使用教程的简单说明

    Qt Creator使用教程的简单说明

    如今 Qt Creator 功能十分强大了,包含项目模板生成、代码编辑、UI 设计、QML 界面编辑、调试程序、上下文帮助等丰富功能,本文就详细的介绍一下如何使用
    2021-08-08
  • C语言求Fibonacci斐波那契数列通项问题的解法总结

    C语言求Fibonacci斐波那契数列通项问题的解法总结

    斐波那契数列相关问题是考研和ACM中常见的算法题目,这里特地为大家整理了C语言求Fibonacci斐波那契数列通项问题的解法总结,需要的朋友可以参考下
    2016-06-06
  • C++异常处理入门(try和catch)

    C++异常处理入门(try和catch)

    C++ 提供了异常机制,让我们能够捕获运行时错误,本文就详细的介绍了C++异常处理入门,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C++ Primer的变量和基本类型详解

    C++ Primer的变量和基本类型详解

    这篇文章主要为大家介绍了C++ Primer,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言实现图书管理系统(文件数据库)

    C语言实现图书管理系统(文件数据库)

    这篇文章主要为大家详细介绍了C语言实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言获取消耗内存的方法

    C语言获取消耗内存的方法

    这篇文章主要介绍了C语言获取消耗内存的方法,涉及C语言中malloc方法的使用技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • VS2013安装配置和使用Boost库教程

    VS2013安装配置和使用Boost库教程

    这篇文章主要为大家详细介绍了VS2013安装配置和使用Boost库的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 使用c语言生成随机数的示例分享

    使用c语言生成随机数的示例分享

    在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,这篇文章主要介绍了使用c语言生成随机数的示例,需要的朋友可以参考下
    2014-03-03
  • C语言实现数组的循环移位的方法示例

    C语言实现数组的循环移位的方法示例

    这篇文章主要介绍了C语言实现数组的循环移位的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • C++中rapidjson组装map和数组array的代码示例

    C++中rapidjson组装map和数组array的代码示例

    今天小编就为大家分享一篇关于C++中rapidjson组装map和数组array的代码示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04

最新评论