指针原来是套娃的


私信TA

用户名:uq_92467646842

访问量:43564

签 名:

数学改变科学,科学改变世界

等  级
排  名 10
经  验 25198
参赛次数 49
文章发表 128
年  龄 0
在职情况 学生
学  校
专  业 物联网工程

  自我简介:

QQ:2830671713

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

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

163 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区