您的位置:首页 > 编程语言

古娜拉黑暗之神(编程实现字符串的反转)

2018-01-26 13:29 405 查看
方法一:效率低

/[b]***************************************************************[/b]

File Name: reverse.c

Author: 浮生流年

Function List: main() 主函数

Created Time: 2018年01月26日 星期五 10时29分34秒

[b]**************************************************************[/b]/

#include <stdio.h>
#include <string.h>
int main()
{
char str[100] = {0};
printf("please input :\n");
scanf("%s", str);
int tmp, i, j;
int len = strlen(str);
for (i = 0; i < len / 2; i++)
{
tmp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = tmp;
}

for (i = 0; i < len; i++)
{
printf("%c ", str[i]);
}
printf("\n");

return 0;
}


方法二:优化版

/[b]***************************************************************[/b]

File Name: reverse2.c

Author: 浮生流年

Function List: main() 主函数

Created Time: 2018年01月26日 星期五 12时53分49秒

[b]**************************************************************[/b]/

#include <stdio.h>
#include <string.h>

int main()
{
char str[100] = {0};
int i;
printf("please input :\n");
scanf("%s", str);

char *p = str + strlen(str) - 1;
char *temp = str;
while (p > temp)
{
*p ^= *temp;//使用异或运算符,实现时间和空间的算法优化
*temp ^= *p;
*p ^= *temp;

p--;
temp++;
}

for (i = 0; i < strlen(str); i++)
{
printf("%c ", str[i]);
}
printf("\n");

return 0;
}


方法三:递归

/[b]***************************************************************[/b]

File Name: reverse3.c

Author: 浮生流年

Function List: main() 主函数

Created Time: 2018年01月26日 星期五 13时09分09秒

[b]**************************************************************[/b]/

#include <stdio.h>
#include <string.h>

char *reverse(char *str, int len)
{
if (len < 1)
return str;

char t = *str;
*str = *(str + len - 1);
*(str + len - 1) = t;

//递归方法:每次交换首尾两个字符,中间部分则又变为和原来字符串同样的问题
return (reverse(str + 1, len -2) - 1);
}

int main()
{
char str[100] = {0};
printf("please input :\n");
scanf("%s", str);

char *ptr = reverse(str, strlen(str));
printf(ptr);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐