编写一个函数 reverse_string(char * string)(分别用递归和非递归方法实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
1.非递归方法
思路:例如1234567要变成7654321,这就相当于字符串的第一个字符和最后一个字符位置换了一下,第二个字符和第六个字符位置换了一下`,这样就可以用两个指针来完成,给定一个头指针start,尾指针end,然后通过解引用把它们的值互换,就可以实现.
#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
void reverseString(char* str)
{
if (*str)//判断指针是否空`
{
char* start = str;
char* end = str + strlen(str) - 1;
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
}
int main()
{
char str[100] = { 0 };
scanf("%s", str);
reverseString(str);
printf("%s\n", str);
system("pause");
return 0;
}
2递归方法
#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
int m_strlen(char* str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
void reverse_r(char *str)
{
if (*str)
{
char* start = str;
char* end = str + m_strlen(str) - 1;
//首尾内容交换
char temp = *start;
*start = *end;
//尾点内容暂时存为结束标记符
*end = '\0';
//逆转子串
reverse_r(start + 1);
//恢复尾点内容
*end = temp;
}
}
int main()
{
char str[100] = { 0 };
scanf("%s", str);
reverse_r(str);
printf("%s\n", str);
system("pause");
return 0;
}
运行后结果如下图