问题分析:
编写一个函数reverse_string(char *string)
实现:将函数字符串中的字符反向排列。
要求:不能使用c函数库中的字符串操作函数。
程序分析:
要实现参数字符串的反向排列:
1.找到字符串数组中的首元素和末元素的地址。
2.定义两个指针变量left,right,和一个中间变量实现首末值和中间值的交换。
3.调用reverse_string这个函数,将返回值设为事先保留字符串的首地址,之后输出反向排列后的字符串。
注意:在实现值的交换时,尽量定义左右值进行交换,慎用变量的前置后置加加减减,这样容易混淆,容易出错,从而实现不了所要的功能。
代码如下:
#include
#include
char * reverse_string(char *string)
{
assert(string);
char *ret = string; // 定义一个char型指针ret保存string
char *left = string; //定义一个left指针存放待改变的左值的地址
char *right; //定义一个right指针存放待改变的右值的地址
char temp; //定义一个中间变量,供左右值的交换
while(*string != '\0')
{
string++; //使string指向‘\0’
}
right = string - 1; //使right指向字符数组中的最后一个元素
while(left < right) //实现左右值的交换
{
temp = *right;
*right = *left;
*left = temp;
left++;
right--;
}
return ret;
}
int main()
{
char str[10] = "abcde";
reverse_string(str);
printf("%s\n",str);
return 0;
}