【C语言】熟悉指针·例题----利用指针对字符串排序

1.题目描述

        编写函数reverse_string,它的原型如下:

        void reverse_string( char *str );

 要求:

1.函数目的是将参数字符串中的字符反向排列;

2.请使用指针而不是数组下标;

3.避免使用C函数库中操作字符串的函数;

 2.代码样例与解释

        先给出了代码例子:

#include<stdio.h>

//函数声明
void reverse_string(char *str);

int main()
{
	/*
    **测试数据为字符串
    **“123456789”
    */
    char a[] = "123456789";
	//调用函数
    reverse_string(a);
	puts(a);
	return 0;
}

void reverse_string(char *str)
{
	char *last_char;
	for (last_char = str; *last_char != '\0'; last_char++)
		;
	last_char--;
	while (str < last_char)
	{
		char temp;
		temp = *str;
		*str++ = *last_char;
		*last_char-- = temp;
	}
}

我们关注的是如何排序

排序前的准备:

样例中 

for (last_char = str; *last_char != '\0'; last_char++)
        ;
    last_char--;       

//for循环退出时多加了一次,所以应该退一位

这一部分是利用 for 循环使得指针 last_char 拿到参数字符串数组 str 的最后一个字符的地址。

排序做了什么

...............
排序示意图1

        实际上在 while 循环中一直在做值的交换(交换的媒介是 char  temp 变量);

        交换完成后 str 指针前进一位,last_char 指针后退一位。

排序示意图2

        循环的条件是 str < last_char ;

        上面的示意图给出了最后一次循环的状态,以及不满足条件的退出。

        例题以及题解思路参考了《C语言与指针》Kenneth A.Reek 著.人民邮电出版社.🐵

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hangangang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值