本文旨在讨论动态建立数组及字符串大小,以及部分排序问题。
思路:
动态建立一维数组,利用一级指针加malloc动态分配内存实现。
动态建立多个字符串(二位数组),利用二级指针加malloc动态分配内存实现。
demo1:
一维数组:
1.动态申请内存分配给一维数组
2.初始化数组,写入数据
3.利用qsort函数排序(由大到小)
代码示例:
#include <stdio.h>
#include <stdlib.h>
int *arry;
int len;
void init_arry()
{
int i;
int tmp;
printf("input arry length :\n");
scanf("%d",&len);
arry = (int *)malloc(sizeof(int));
for(i = 0;i < len;i++)
{
printf("input %dth data :\n",i+1);
scanf("%d",&tmp);
arry[i] = tmp;
}
}
int compar(const void*a,const void*b)
{
return *(int*)a - *(int*)b;
}
void sort_arry()
{
int i;
qsort(arry,len,sizeof(int),compar);
for(i = 0;i < len; i++)
{
printf("%d ",*(arry+i));
}
printf("\n");
free(arry);
}
int main()
{
init_arry();
sort_arry();
return 0;
}
结果示例:
demo2:
字符串数组:
1.动态申请内存分配给字符串数组
2.初始化字符数组,写入数据
3.利用qsort函数排序(依据首字母ASCII值,由小到大)
代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **arry;
int num;
int len;
void init_string()
{
int i;
printf("input string of number :\n");
scanf("%d",&num);
printf("input every string of length :\n");
scanf("%d",&len);
arry = (char **) malloc(num*sizeof(char *));
for(i = 0;i < num;i++)
{
printf("input %dth string :\n",i+1);
arry[i] = (char *) malloc(len*sizeof(char));
scanf("%s",arry[i]);
}
}
int compar(const void *a, const void *b)
{
return strcmp(*(char**)a, *(char**)b);
}
void sort_string()
{
int i;
qsort(arry,num,sizeof(arry[0]),compar);
for(i = 0;i < num;i++)
{
printf("%s ",arry[i]);
free(arry[i]);
}
printf("\n");
free(arry);
}
int main()
{
init_string();
sort_string();
return 0;
}
结果示例:
demo3:
字符串数组:
1.动态申请内存分配给字符串数组
2.初始化字符数组,写入数据
3.按照字符串ASCII值的和排序字符串(由小到大)
代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **arry;
int num;
int len;
int data[][2];
void init_string()
{
int i;
printf("input string of number :\n");
scanf("%d",&num);
printf("input every string of length :\n");
scanf("%d",&len);
arry = (char **) malloc(num*sizeof(char *));
for(i = 0;i < num;i++)
{
printf("input %dth string :\n",i+1);
arry[i] = (char *) malloc(len*sizeof(char));
scanf("%s",arry[i]);
}
}
void sort_string()
{
int i,j,tmp;
for(i = 0;i < num-1;i++)
{
data[i+1][0] = strcmp(arry[i],arry[i+1]);;
data[i+1][1] = i+1;
}
data[0][0] = 0;
data[0][1] = 0;
for(i = 0;i < num - 1 ;i++)
{
for(j = 0;j < num -i -1;j++)
{
if(data[j][0] < data[j+1][0])
{
tmp = data[j][0];
data[j][0] = data[j+1][0];
data[j+1][0] = tmp;
tmp = data[j][1];
data[j][1] = data[j+1][1];
data[j+1][1] = tmp;
}
}
}
for(i = 0;i < num;i++)
{
printf("%s ",arry[data[i][1]]);
free(arry[data[i][1]]);
}
printf("\n");
free(arry);
}
int main()
{
init_string();
sort_string();
return 0;
}
结果示例: