文章目录
- 1.描述
- 2.解题思路
- 3.具体代码
1.描述
- 输入描述:
将一个字符串str的内容颠倒过来,并输出。可以有空格
数据范围:1≤𝑙𝑒𝑛(𝑠𝑡𝑟)≤10000 1≤len(str)≤10000
- 输出描述:
输出逆序的字符串
- 示例图:
2.解题思路
首先,我们需要一个接收函数用来接收字符串,这里的字符串应该用字符数组存储。
逆序输出,就是将数组元素倒过来输出。
我们可以直接通过逆序的数组下标,输出逆序字符串。
也可以将数组下标元素逆序交换,输出逆序字符串。
3.具体代码
我找到了两个方法:
代码1:
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char s[10000];
gets(s);
for(i=strlen(s)-1;i>=0;i--)
{
putchar(s[i]);
}
return 0;
}
打印:
代码讲解:
- 定义整型变量i和字符数组s。
- 通过
gets(s)
来接收输入的语句,直到遇到换行符。 - 通过一个for循环来逆序打印输入的语句。
代码2:
这个代码看起来复杂点。
void Reverse(char* str)
{
char* left = str;// 定义左指针left,初始指向字符串的起始位置
char* right = str + strlen(str)-1;// 定义右指针right,初始指向字符串的最后一个字符位置
while(left < right)// 当左指针小于右指针时,执行循环体
{
char temp = *left;// 临时保存左指针指向的字符
*left = *right; // 将右指针指向的字符赋值给左指针指向的位置
*right = temp; // 将临时保存的左指针字符赋值给右指针指向的位
++left;// 左指针向后移动一位
--right;// 右指针向前移动一位
}
}
int main()
{
char str[10000] = {0};
while(gets(str))
{
Reverse(str);
printf("%s\n", str);
memset(str, 0, sizeof(str)/sizeof(str[0]));
}
return 0;
}
打印:
代码讲解:
-
进入main函数,先定义一个字符数组str。
-
进入while循环,通过
gets(str)
读取用户输入,直到遇到换行符。 -
将字符数组arr首元素地址传递给
Reverse()
函数。 -
进入
Reverse()
函数,定义左指针left,初始指向字符串的起始位置 -
定义右指针right,初始指向字符串的最后一个字符位置
-
进入while循环,当左指针小于右指针时,执行循环体
-
char temp = *left;// 临时保存左指针指向的字符 *left = *right; // 将右指针指向的字符赋值给左指针指向的位置 *right = temp; // 将临时保存的左指针字符赋值给右指针指向的位 ++left;// 左指针向后移动一位 --right;// 右指针向前移动一位
简单来说,就是把最左边和最右边的元素位置互换。
-
Reverse()
函数执行完后,返回main函数,打印arr数组的内容 -
使用
memset
函数将str数组清零,为下一次读取做准备。 -
程序会一直循环,知道用户不输入为止。
简单来说,就是把最左边和最右边的元素位置互换。 -
Reverse()
函数执行完后,返回main函数,打印arr数组的内容 -
使用
memset
函数将str数组清零,为下一次读取做准备。 -
程序会一直循环,知道用户不输入为止。