原题链接:[编程入门]自定义函数之字符串反转
解题思路:
第一个方法,也是最简单的方法,输入以后逆序输出:
这里使用了strlen函数,要记得加上头文件cstring(c语言是string.h)
#include <iostream> #include <cstring> using namespace std; int main(){ char s[107]; cin>>s; for(int i=strlen(s)-1;i>=0;i--){ cout<<s[i]; } return 0; }
在c++里提供了字符串string类型,在求长度的时候可以不用额外加头文件了:
#include <iostream> using namespace std; int main(){ string s; cin>>s; for(int i=s.size()-1;i>=0;i--){ cout<<s[i]; } return 0; }
在c++里也有一个强大的算法库,提供了翻转函数:
reverse(s.begin(), s.end()),需要提供需要翻转的头和尾,记得加上<algorithm>头文件
#include <iostream> #include <algorithm> using namespace std; int main(){ string s; cin>>s; reverse(s.begin(), s.end()); cout<<s; return 0; }
在char 数组类型是这样使用的:
#include <iostream> #include <algorithm> #include <cstring> using namespace std; int main(){ char s[107]; cin>>s; reverse(s,s+strlen(s)); cout<<s; return 0; }
当然在c语言里也有翻转函数:
strrev(s),需要头文件string.h,不过有些编译器不支持,亲测在网站上不支持这个函数,可以自己在本地试试。
#include<stdio.h> #include<string.h> int main() { char s[107]; scanf("%s",s); strrev(s); printf("%s",s); return 0; }
以上是给大家介绍了几个小技巧,怎么自己实现数组内部的翻转呢,可以用双指针算法:
#include <iostream> #include <cstring> using namespace std; int main(){ char s[107]; cin>>s; for(int i=0,j=strlen(s)-1;i<j;i++,j--){//i指向数组第一个位置,j指向最后一个位置,进行交换 //使用异或进行交换,运行速度快 s[i]=s[i]^s[j]; s[j]=s[i]^s[j]; s[i]=s[i]^s[j]; 交换以后分别让i和j向中间方向的下一个位置移动,移动后交换,一直到i==j时结束 } cout<<s; return 0; }
这样的交换以后,整体数组就翻转了。
既然是双指针算法,可不可以用指针呢,当然可以:
#include <iostream> #include <cstring> using namespace std; int main(){ char s[107]; cin>>s; char *a=s,*b=s+strlen(s)-1; while(a<b){ //交换 *a=(*a)^(*b); *b=(*a)^(*b); *a=(*a)^(*b); //移动 a++,b--; } cout<<s; return 0; }
不过就是*号太多,代码不是很好看了。
以上是c++写法,改成c语言就是cin换成scanf cout换成printf,再附上一个突发奇想的递归做法吧:
#include <iostream> using namespace std; int rs(char *s){ if(*s=='\0')return 0; rs(s+1); cout<<*s; } int main(){ char s[107]; cin>>s; rs(s); return 0; }
大家可以研究一下哈
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复