この共有のためだけに、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;
ここに次のコードを記述したことを考えると、この部分は実際には2次元の文字配列です。
char *name[5][30];
int i,n=5;
入力用のブラックボックスが表示された場合、char * name [5]と記述されている場合、2つの書き込み方法はまったく同じであり、終了します。
2番目のタイプの書き込みは、最初のタイプの入力とまったく同じですが、次のように2つのサブ関数の正式なパラメーターが考慮されます。
void sort(char *name[],int n);
void print(char *name[],int n);
と
char *name[5][30];
int i,n=5;
char * name [5] [30];が一致せず、データ入力後に2つのサブ関数を呼び出すことができない
ため、Enterキーを押すと、プログラムがクラッシュし、ブラックボックスが直接閉じます。
私の文章は、3次元の文字配列がサブ関数と一致しないということだと思います
以下:
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;
}
}
}
}
コードのこの部分は、2次元文字配列のソートに適用される単純な数値バブルソートです。