菜蛙


私信TA

用户名:hu2022

访问量:16305

签 名:

明日复明日,明日何其多。我生待明日,万事成蹉跎。

等  级
排  名 548
经  验 4387
参赛次数 0
文章发表 75
年  龄 0
在职情况 学生
学  校 哈工程
专  业

  自我简介:

题目:在主函数中输入一个字符串(不包含空格),写一个新函数将字符串按反序存放,并在主函数中输出反序后的字符串

故事背景:

阿华家养了一只电子哈士奇小哈,为了防止它闲的拆家,阿华走之前给狗留了道作业,告诉它在自己回家之前做不出来,就三天不带他见隔壁养的那只小士,小哈一听不能去见软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;
}
2024-02-28 21:32:26
#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;
}
2024-02-09 21:08:41
#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;
}
2024-02-05 18:52:35
#include<stdio.h>//用栈来模拟这个过程简直太棒了
void Print()
{
 char a=getchar();
 if(a!='\n')
 Print();
 printf("%c",a);
    
}
int main()
{
    Print();
    return 0;
}这个平台的格式错误应该怎么解决啊
2024-01-31 21:50:08
#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;
}
2024-01-23 20:14:18
大佬
2023-12-30 20:02:09
#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;
}
2023-11-24 08:57:34
#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));
    }
}
2023-07-31 15:11:13