解题思路:
第一个方法,也是最简单的方法,输入以后逆序输出:

这里使用了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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论