要求通过键盘输入5串字符串,然后调用函数sort完成字符串从大到小排列,然后调用print函数完成字符串输出。

一次C语言练习平台所得,仅以此次分享…

此次分享:

  1. 代码展示
  2. 代码分析

代码展示:

#include<stdio.h>
#include<string.h>
void sort(char *name[],int n);
void print(char *name[],int n);
int main()
{
    
    
    char *name[5];
    char a[31],b[31],c[31],d[31],e[31];
    int i,n=5;
    name[0]=a;name[1]=b;name[2]=c;name[3]=d;name[4]=e;
	
	printf("Please input 5 strings:");
	for(i=0;i<5;i++)
	gets(name[i]);
	printf("Output:\n");
	sort(name,5);
    printf("After the strings are sorted the result:\n");
	print(name,5);
	return 0;
}
void sort(char *name[],int n)
{
    
    
   int i,j;
   char *temp;
   for(i=0;i<4;i++)
   {
    
    
	   for(j=0;j<4-i;j++)
	   {
    
    
	   if(strcmp(name[j],name[j+1])>0)
	   {
    
    
		   temp=name[j];
		   name[j]=name[j+1];
		   name[j+1]=temp;
	   }
	   }
   }
}
void print(char *name[],int n)
{
    
    
	int i;
	for(i=0;i<5;i++)
	{
    
    
		printf("%s\n",name[i]);
	}
}

代码分析:

char *name[5];
    char a[31],b[31],c[31],d[31],e[31];
    int i,n=5;
    name[0]=a;name[1]=b;name[2]=c;name[3]=d;name[4]=e;
	

此部分实际为二维字符数组,考虑到此处我写成的是以下代码:

	char *name[5][30];
	int i,n=5;

两种写法在黑框出现作输入时一模一样,若写成 char *name[5];则会终止。

第二种写法虽与第一种输入时一模一样,但考虑到两个子函的形参,如下:

void sort(char *name[],int n);
void print(char *name[],int n);

	char *name[5][30];
	int i,n=5;

里的 char *name[5][30];不相符合导致输入完数据后两个子函都不能被调用
因此当你输入完时按回车程序会崩溃直接关闭黑框。
我猜想我的写法应该是三维字符数组和子函不相匹配

以下:

void sort(char *name[],int n)
{
    
    
   int i,j;
   char *temp;
   for(i=0;i<4;i++)
   {
    
    
	   for(j=0;j<4-i;j++)
	   {
    
    
	   if(strcmp(name[j],name[j+1])>0)
	   {
    
    
		   temp=name[j];
		   name[j]=name[j+1];
		   name[j+1]=temp;
	   }
	   }
   }
}

这部分代码就是简单的数字冒泡排序运用到二维字符数组排序上。

猜你喜欢

转载自blog.csdn.net/yooppa/article/details/114548086
今日推荐