键盘输入一个字符串,实现逆序输出。
刚看到题的时候想到了交换两边的字符,然后实现逆序输出,但是有思路却不知道怎么来实现。通过在CSDN里面搜索,看了别人对这个题的实现,才豁然开朗,然后关了CSDN界面,自己动手在VSCode里面写,中间还碰到了一些问题,像是遍历输出字符的时候会忘记[]
,定义字符数组的时候没有初始化导致输出的时候有乱码,使用fgets函数获取输入后输出的时候会把换行符也打印出来等等,这些问题也都尽可能地解决了,有所收获。
下面是我写的代码:
#include <stdio.h>
#include <stdlib.h>
//逆序输出一个字符串
//方法1:从后往前输出
void f1(){
char str[20]={'\0'};
int i;
printf("请输入一个字符串:");
//fgets(str , sizeof(str) , stdin);//多输出一个换行符
gets(str);
printf("字符串逆序输出:");
//从字符串倒数第二个字符开始逆序输出,最后一个为'\0'
for(i=sizeof(str)/sizeof(str[0])-1;i>=0;i--){
printf("%c",str[i]);
}
printf("\n");
}
//方法2:两端交换后输出
void f2(){
char str[20]={'\0'};
int i , j , k;//k为中间变量,用于字符串两端字符交换
printf("请输入一个字符串:");
//fgets(str , sizeof(str) , stdin);//多输出一个换行符
gets(str);
printf("字符串逆序输出:");
i=0;//字符串第一个字符
j=(sizeof(str)/sizeof(str[0]))-1;//字符串倒数第二个字符,最后一个为'\0'
//从两端开始向内交换字符
while(i<j){
k=str[i];
str[i]=str[j];
str[j]=k;
i++;
j--;
}
//字符串遍历输出
for(i=0;i<20;i++){
printf("%c",str[i]);
}
printf("\n");
}
int main(){
f1();
f2();
system("pause");
return 0;
}