一次C语言练习平台所得,仅以此次分享…
此次分享:
- 代码展示
- 代码分析
代码展示:
#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;
}
}
}
}
这部分代码就是简单的数字冒泡排序运用到二维字符数组排序上。