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 的最后一个字符的地址。
排序做了什么
实际上在 while 循环中一直在做值的交换(交换的媒介是 char temp 变量);
交换完成后 str 指针前进一位,last_char 指针后退一位。
循环的条件是 str < last_char ;
上面的示意图给出了最后一次循环的状态,以及不满足条件的退出。
例题以及题解思路参考了《C语言与指针》Kenneth A.Reek 著.人民邮电出版社.🐵