实现思想:字符串逆置有很多种方法:
如下为后两种方法实现的代码:
- 逐个翻转;(先将第一个字符保存,将自第二个起到最后为止的字符依次前移一位,再将保留下来的第一个字符放置最后一位,这样实现了一次。循环多次实现整体逆置。缺点:代码的时间复杂度太高)
- 指针实现;(用两个指针,一个指向头部,一个指向尾部,进行交换只需交换至二者重合或交错即停下。其大大降低了代码的时间复杂度和空间复杂度)
- 递归实现。
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(char *string) //实现计算字符串长度
{
int len = 0;
while (*string)
{
string++;
len++;
}
return len;
}
void reverse_string(char *string) //递归实现字符串逆置
{
assert(string);
int len = my_strlen(string);
char* end = string + len - 1;
char tmp = 0;
if (len>=2)
{
tmp = *string;
*string = *end;
*end = '\0';
reverse_string(string + 1);
*end = tmp;
}
return;
}
void reverse_string1(char *string) //指针实现字符串逆置
{
char *start = string;
char *end = string + my_strlen(string) - 1;
while (start <= end)
{
*start ^= *end;
*end ^= *start;
*start ^= *end;
start++;
end--;
}
}
int main()
{
char arr[] = "ABCDEF";
reverse_string(arr);
printf("%s", arr);
system("pause");
return 0;
}