我想存储一个字符串数组,计算它们的长度并使用下面提到的算法以长度增加顺序(最小 - >更大)重新排列它们//
交换持有一个相对较大的字符串来替换顺序(当发现另一个分钟时)
我可以使用realloc(),但我还没考虑保护编程
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,N;
printf("\n Input amount of alphanumericals: ");
scanf("%d",&N);
{
int min;
char *swap=(char*)malloc(sizeof(char)*150);
char *A[N],**temp;
temp=A;
for(i=1;i<=N;i++){
printf("\nInput %d element:",i);
gets(temp+i);
}
free(temp);
printf("\n\nData [");
for(i=0;i<N;i++)
printf(" %s",A[i]);
printf(" ]\n\n");
//Ins sort
for(i=0;i<N;i++){
min=i;//Assume current is min
for(j=i+1;j<N;j++){
//Compare assuming min with current
if(strcmp(A[j],A[min])<0){
min=j;
}
//If next is min replace in current position
if(min!=i){
swap=A[i];
A[i]=A[min];
A[min]=swap;
}
}
free(swap);
printf("\nAfter insertion point algorithm\n");
printf("\n\nInsertion Sorted Data [");
for(i=0;i<N;i++)
printf(" %s",A[i]);
printf(" ]");
}
return 0;
}
答案 0 :(得分:1)
您尚未为A
及其元素分配内存
首先为A
分配内存,然后为A
的元素分配内存。然后分配temp = A[i]
。
应该是这样的:
A = malloc(N);
for(int i = 0; i < N; i++)
A[i] = malloc(150);