题目
题目描述
写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。
输入描述
一行字符
样例输入
123456abcdef
样例输出
fedcba654321
题解
该题思路很多,请往下看
方法一 C语言基础操作版
#include<stdio.h>
#include<string.h>
#define MAX 100000
char a[MAX],b[MAX];
int main()
{
int i,j,len;
gets(a);
len = strlen(a);
for(i = 0,j = len - 1;i < len;i++,j--)
b[i] = a[j];
printf("%s\n",b);
return 0;
}
分析
调用常用的strlen函数获取字符数组a的长度,然后将字符数组a逆序存放到另一个数组b中。
这个思路较为常规,是一般被优先想到的思路。
小问题:为什么接收字符串不用scanf函数呢?
scanf("%s",a)
遇到空格时会停止接收。
比如输入abc fgh
,因为scanf
在遇到空格时立即停止,所以只接收到了abc
。
而gets
函数在遇到空格时继续接收,只有在遇到\n
时才停止。
因为题目中没有明确字符串中没有空格,所以使用gets
函数接收字符串更为妥当。
方法二 C语言调用函数版
#include<stdio.h>
#include<string.h>
#define MAX 100000
char a[MAX];
int main()
{
gets(a);
printf("%s\n",strrev(a));
return 0;
}
分析
调用字符串倒置函数strrev
n函数,并直接将函数返回值(即倒置结果)输出。简单明了,一步到位。
但strrev
函数并不常用,如果对于字符串的相关函数较为陌生,可能难以想到。
方法三 C++string类和反转函数
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string a;
getline(cin,a); // 这里不用cin>>,也是为了成功接收含有空格的一整行字符串
reverse(a.begin(),a.end());
cout << a << endl;
return 0;
}
分析
- 使用string类型接收字符串,相比于字符型数组,无需再提前分配大量的空间。
- string的空间大小可以根据接收的字符串长度自动调整,这使得在储存的字符串长度较小时,不会造成太大的空间浪费。
reverse
函数未algorithm库中常用的函数之一。C++的algorithm库中内置了很多功能强大的函数,善用这些函数,能让我们在编写程序时更加方便。
题解为本人原创。
如有疏漏欢迎指正。
欢迎在评论区和我共同探讨、学习交流呀。
原创不易,转载请说明出处。