题目要求:
编写一个函数reverse_string(char*string)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数
比如:
char arr[]="abcdef"
逆序之后数组的内容变成:fedcba
解题思路:
- 先假定要逆序的字符串为arr[]=“abcdef”,那么arr[]存储的元素有'a','b','c','d','e','f','\0'。
- 用left指向第一个元素'a',用‘right'指向倒数第二个元素'f‘。
- 将arr[left]和arr[right]中的元素进行互换。
- 改变left和right的值,让left指向下一个元素,right指向前一个元素。
- 重复上述过程,直到完成字符串逆序。
图解:
补充:如果想让right指向倒数第二个元素'f',那么right就要等于字符串长度-1。但是题目要求不可以使用C函数库中的字符串操作函数,即strlen()函数来计算字符串长度。就需要写一个函数来实现计算字符串长度的功能。
函数如下:
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
代码实现:
#include <stdio.h>
int my_strlen(char* str) //用于计算字符串的长度
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int left = 0; //指向首元素
int right = my_strlen(str) - 1; //指向倒数第二个元素
while (left < right) //当left >= right 时证明所有元素均已逆序
{
/*char tmp = str[left];
str[left] = str[right];
str[right] = tmp;*/
char tmp = *(str + left); //上条注释中的写法也可以,只是用指针的方法更直观些
*(str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);//这里只传递了首元素的地址
printf("%s\n", arr);
return 0;
}
运行截图: