[置顶] 【C语言】 字符串逆序
2016-05-26 12:24
405 查看
字符串逆序有多种办法,下面我们分方法而论: // 非递归实现字符串反转: char *reverse(char *str) { if( !str ) { return NULL; } int len = strlen(str); int i,j; char temp; for( i = 0,j=len-1; i<j;i++,j--) { // 交换前后两个相应位置的字符 temp=str[i]; str[i]=str[j]; str[j]=temp; } return str; } int main() { char src[] = {"abcdef"}; char *pdest = reverse(src); puts(src); return 0; } //递归就是一种栈结构: #include<stdio.h> #include<assert.h> void reverse_string(const char * const string) { assert(string); if (*string == '\0') return; else reverse_string(string+1);// 先将字符压栈 putchar(*string);// 再将字符按照先进后出的顺序输出 } int main() { char string[20] = {0}; scanf("%[^\n]",string); reverse_string(string); printf("\n"); return 0; } 亦可:(若要求不使用其他库函数) #include<stdio.h> #include<assert.h> int my_strlen(const char *string) { assert(string); if(*string == '\0') { return; } else return 1+my_strlen(string+1); } char *reverse_string(char *string,int len) { assert(string); if(!string) { return NULL; } if(len > 1) { char tmp = string[0]; string[0] = string[len-1]; string[len-1] = '\0'; // 最后一个字符在下次递归时不再处理 reverse_string(string + 1,len-2);//递归调用,每调用一次,要反转的字符串分别从头和末尾各减少一个 string[len-1] = tmp; } return string; } int main() { char string[20] = {0}; int len; scanf("%s",string); len = my_strlen(string); reverse_string(string,len); printf("%s\n",string); return 0; }本文出自 “Vs吕小布” 博客,谢绝转载!
相关文章推荐
- [置顶] 【C语言】 二维数组中查找,杨氏矩阵
- [置顶] 【C语言】 左旋字符串
- [置顶] 【C语言】 提取子字符串
- [置顶] 【C语言】 求一个数的二进制反转后的值
- [置顶] 【C语言】求两数二进制序列不同的位
- [置顶] 【C语言】 棋盘游戏
- [置顶] 【C语言】 数组的初始化、逆置、清空
- [置顶] 【C语言】 折半查找
- [置顶] 【C语言】 杀人凶手问题
- [置顶] 【C语言】 跳水比赛名次预测问题
- [置顶] 【C语言】杨辉三角
- [置顶] 【C语言】 猜数字游戏
- [置顶] 【C语言】 n个不同的数可组成多少个不同的三位数
- [置顶] 【C语言】求最大最小值
- [置顶] 【C语言】一分钟后关机
- [置顶] 【C语言】判断花括号{}是否匹配
- [置顶] 【C语言】求 a+aa+aaa+aaaa+aaaaa
- [置顶] 【C语言】模拟三次密码输入
- [置顶] 【C语言】输出字符串
- [置顶] 【C语言】输出一个整数的每一位