【发布时间】:2020-01-31 05:27:09
【问题描述】:
所以我使用插入排序来对字符串进行排序。
如果字符串已经排序,它将运行。如果它们被部分排序或完全颠倒。它要么运行产生不正确的结果,要么给出错误:(0xC0000005)。
ptr 声明:char **ptr; 其中内存是动态分配的。
插入排序:
void insertionSort(char **ptr,int rows,int cols)
{
char *key;
int i,j;
//first element is considered sorted
for( i=1;i<=rows-1;i++)
{
key=ptr[i];
for( j=i-1;strcmp(key,ptr[j])<0 && j>=0;j--)
{
ptr[j+1]=ptr[j];
}
/*Program sometimes stalls at this part and gives error:`(0xC0000005)`
when strings are partially sorted/completely reversed*/
ptr[j + 1] = key;
}
}
这是您非常标准的插入排序实现。适用于数字,所以我不知道为什么我不能对字符串进行排序。
这也是ptr 的值是如何从用户那里定义的:
void read_charArray(char **ptr,int rows,int cols)
{
for(int i=0;i<=rows-1;i++)
{
printf("Enter name for name #%-3d: ",i+1);
fgets(ptr[i],cols+5,stdin);
ptr[i]=strtok(array[i],"\n");
}
}
【问题讨论】:
-
请发minimal reproducible example 来展示您所描述的内容。
-
只是一点点小提示,这里的人喜欢代码可读而不需要水平滚动,特别是如果代码还需要垂直滚动;当你做出适当的 MRE 时,你会这样做。
-
如何定义传递给该函数的数组?
-
@Yunnosch 这样好吗?
-
仍然没有定义数组。我的意思是,在你的
main中,你可能有类似char array[X][Y]的东西,我也想看看那部分
标签: c string sorting insertion-sort