题目:在主函数中输入一个字符串(不包含空格),写一个新函数将字符串按反序存放,并在主函数中输出反序后的字符串
故事背景:
阿华家养了一只电子哈士奇小哈,为了防止它闲的拆家,阿华走之前给狗留了道作业,告诉它在自己回家之前做不出来,就三天不带他见隔壁养的那只小士,小哈一听不能去见软fufu的小士,立马认真起来。
小哈的苦恼——
看到阿华留下一串不认识的人类语言——123456abcdef,阿华说只要自己能够把这个字符串“倒背如流”就算完成了作业。
可是自己出厂时只安装了复读机功能,并不具备“倒背”技能啊!
小哈边给自己充电边运转电子脑,突然它冒出一个大胆的想法——我要自己给自己“安装”这个技能!
奋斗的小哈之只用main函数实现反序——
说干就干!
曾经被阿华拉着一起学了一门叫C语言的人类语言,虽然当初自己不情不愿的,没存储多少内容,不过连一下家里的WIFI用电子脑很快就能找到,小哈为自己的聪明才智小小得意了五分钟。
它照猫画虎将电子脑翻到,跟阿华练习C语言一样的界面,再用软键盘打出了
#include<stdio.h> int main(void){ return 0; }
它又点了运行,发现并没有什么问题,小哈想我就记得阿华每次都先写这些,果然没记错~
小哈想到:接下来我应该把字符串,放到这个叫主函数的东西里面去,这么长一串那就存到数组里面吧,于是它又加了两句
#include<stdio.h> int main(void){ char array[100]; gets(array); return 0; }
我记得gets()能把字符串写入数组里,但是为了保险起见,我还是输出看看吧
#include<stdio.h> int main(void){ char array[100]; gets(array); printf("%s",array); return 0; }
嗯,果然不出我所料,那么下一步我先要将它顺序反一下,这个简单嘛,我只需要再写一个新数组,把array数组的最后一个元素赋值给新数组的第一个元素,把array的倒数第二个赋值给新数组的第二个……
这样一个一个赋值,万一阿华明天换一个字符串,我又要重新写了,让我好好思考一下。
我想到了!我可以用for循环实现赋值——
先用strlen()函数计算出array的长度,array数组最后一个元素的下标就是长度-1;
然后把array数组的最后一个元素,赋值给新数组的第一个元素;
接着array数组的下标减一,新数组的下标加一,这样就把array的倒数第二个赋值给新数组的第二个啦……
让新数组的下标一直增加到,与array数组最后一个元素的下标相等,就可以把array中的所有元素赋值给新数组了啊!
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 int main(void){ char array[100],newarray[100]; gets(array); //printf("%s",array); int num = strlen(array); //先计算出array数组长度 int i,j=num-1; //数组下标是从0开始,所以最后一个元素的下标需要用长度-1 /* 当新数组newarray元素下标,增加到和array长度相等时 array中的所有元素都被反序存到newarray中了 就可以结束循环啦 */ for(i=0;i<num;i++){ newarray[i] = array[j]; printf("%c",newarray[i]); j--; } return 0; }
哇!我成功了,芜湖~
志得意满了十分钟后,小哈开始思考,如果说我把反序这个操作,写成一个单独的函数,那以后要是又要用到我就可以直接调用,不用再写一遍啦~思及此,小哈的雄心又被唤醒。
进击的小哈之用新函数反序,主函数输入输出——
废话不多说,先给我的新函数起个响亮的名字
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 int FlashBack(){ return 0; } int main(void){ char array[100],newarray[100]; gets(array); //printf("%s",array); int num = strlen(array); //先计算出array数组最后一个元素的下标 int i,j=num-1; //数组下标是从0开始,所以最后一个元素的下标需要用长度-1 for(i=0;i<num;i++){ newarray[i] = array[j]; printf("%c",newarray[i]); j--; } return 0; }
嗯不错不错FlashBack听起来就很霸气!
既然我要用新函数来反序,那先要将main函数中array数组传输给FlashBack函数,而且main函数中的反序也就不需要了。
main函数里的array数组是char类型的,那我的新函数FlashBack的形参也要统一才行!
而且根据刚才实现的反序来看,会用到array数组的长度这个数据,所以我还需要将strlen(array)这个数据传递给FlashBack。
那么也就是说,我的新函数会拥有两个形参啦~一个是char型的数组,一个是int型的长度。
那就让我试试吧
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 int FlashBack(char a[],int n){ printf("%s\n%d",a,n); return 0; } int main(void){ char array[100]; gets(array); //printf("%s",array); int num = strlen(array); //先计算出array数组长度 FlashBack(array,num); return 0; }
看来需要的数据已经传递给新函数FlashBack了!
接下来我就像刚才在main函数中反序一样,用一个for循环在FlashBack函数中反序就好啦~
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 int FlashBack(char a[],int n){ //printf("%s\n%d",a,n); char newarray[100]; int i,j=n-1; for(i=0;i<n;i++){ newarray[i] = a[j]; printf("%c",newarray[i]); j--; } return 0; } int main(void){ char array[100]; gets(array); //printf("%s",array); int num = strlen(array); //先计算出array数组长度 FlashBack(array,num); return 0; }
哇呜~果然实现了!不过我是一只心思缜密的修勾,在函数里写死输出格式,这可不行!
我要在main函数中输出,这样以后就算是要修改输出格式,也不用去动我的FlashBack函数啦~
可是数组是不可以作为返回值被return的,那我要怎么将反序后的数组传递给main函数呢?
对了,可以用指针呀!
我在FlashBack函数中声明一个指针,让指针指向newarray数组的首地址;
然后return这个指针给main函数;
newarray数组是个char型数组,那么我需要一个char型的指针;
这样的话main函数也需要声明一个char型的指针,用来接收FlashBack函数中的指针类型的返回值。
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 char* FlashBack(char a[],int n){ char newarray[100]; int i,j=n-1; char* b; for(i=0;i<n;i++){ newarray[i] = a[j]; j--; } b = &newarray[0]; return b; } int main(void){ char array[100]; char* b; int i; gets(array); int num = strlen(array); //先计算出array数组长度 b = FlashBack(array,num); for(i=0;i<num;i++) printf("%c",b[i]); return 0; }
咦?为什么只输出了反序数组newarray中的第一个元素,让我好好检查一下!
啊!我知道了!
newarray数组是在函数FlashBack中定义的,当函数执行完之后,数组被分配的空间会释放,所以main函数中才会出现输出不全的现象。
那我就将newarray数组定义成局部静态变量,这样函数执行完也不会释放空间啦~
#include<stdio.h> #include<string.h> //strlen()函数在string头文件中,一定得先调用一下 char* FlashBack(char a[],int n){ static char newarray[100]; int i,j=n-1; char* b; for(i=0;i<n;i++){ newarray[i] = a[j]; j--; } b = &newarray[0]; return b; } int main(void){ char array[100]; char* b; int i; gets(array); int num = strlen(array); //先计算出array数组长度 b = FlashBack(array,num); for(i=0;i<num;i++) printf("%c",b[i]); return 0; }
终——终于让我实现啦!!!
沉思的小哈——
突然感觉拆家也没有很好玩,感觉在dotcpp上做作业比拆家有意思多了~
而且还能增加学识,这样小士一定会更迷恋我的,她就会分我吃她的小鱼干了~
隔壁橘猫小士:我不是真的人,但你是真的狗!
0.0分
163 人评分
#include <stdio.h> #include <math.h> #include <string.h> int main(){ char str[100]; gets(str); int len = strlen(str); for(int i=len-1;i>=0;i--){ printf("%c",str[i]); } return 0; }
#include<stdio.h> #include<string.h> int main() { char a[100]; gets(a); int n = strlen(a); int i ; for(i=n-1;i>=0;i--){ printf("%c",a[i]); } return 0; }
#include<stdio.h> #include<string.h> void reverse(char arr[]) { int len = strlen(arr); int left = 0; int right = len - 1; while (left < right) { int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } int main() { char arr[1000] = { 0 }; scanf("%s", arr); reverse(arr); printf("%s\n", arr); return 0; }
#include<stdio.h>//用栈来模拟这个过程简直太棒了 void Print() { char a=getchar(); if(a!='\n') Print(); printf("%c",a); } int main() { Print(); return 0; }这个平台的格式错误应该怎么解决啊
#include<stdio.h> #include<string.h> int main() { char x[100]; int t,i; printf("写一函数,使输入的一个字符串按反序存放,在主函数中输入并输出反序后的字符串(不包含空格)。\n"); scanf("%s",&x); t=strlen(x); for(i=t-1;i>=0;i--) { printf("%c",x[i]); } printf("\n"); return 0; }
#include <stdio.h> #include <string.h> int main() { char a[20]; int n,i; scanf("%s",a); n=strlen(a); for(i=n-1;i>=0;i--) { printf("%c",a[i]); } return 0; }
#include <stdio.h> #include<string.h> void char_reverse(char *p, int m); void main(void) { char a[100]; scanf( "%s" , &a[0] ); char_reverse( &a[0], strlen(a)); } void char_reverse(char *p, int m) { int i; for(i=m; i>0; i--) { printf("%c",*(p+i-1)); } }
简单编码 (C++代码)浏览:730 |
Hello, world! (C语言代码)浏览:1315 |
C二级辅导-进制转换 (C语言代码)浏览:657 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:548 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:624 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)万恶的long long浏览:906 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:467 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:760 |
WU-输入输出格式练习 (C++代码)浏览:1133 |
求圆的面积 (C语言代码)浏览:1756 |