【发布时间】:2020-11-09 09:32:16
【问题描述】:
我正在尝试以字母顺序排序的方式将字符串矩阵(大小 r 行和 c 列)合并到单个字符串数组(大小 r*c)中,问题是我的算法只是对其进行部分排序并且没有得到结果数组索引的正确值。
行本身已经排序,这意味着对于每一行,该行中的字符串已经按字母顺序排列。
排序算法效率太低。
示例:(当然我必须使用更大的矩阵)。
fbc zfb
abc tuv
结果数组:
abc 脸书 电视 zfb
这是我的(错误的)函数:
void orderMat(char ***mat, int r, int co)
{
int i,a=0,b=0,c=0; char **c1;
c1=malloc( (r*co)*sizeof(char *) );
for(i=0;i<(r-1);i++)
{ a=0;b=0;
while(a<co && b<co)
{
if(strcmp(mat[i][a],mat[i+1][b])<0)
{
c1[c]=malloc(strlen(mat[i][a])*sizeof(char));
strcpy(c1[c],mat[i][a]);
c++; a++;
}
else if(strcmp(mat[i][a],mat[i+1][b])>0)
{
c1[c]=malloc(strlen(mat[i+1][b])*sizeof(char));
strcpy(c1[c],mat[i+1][b]);
c++; b++;
}
}
while(a<co)
{
c1[c]=malloc(strlen(mat[i][a])*sizeof(char));
strcpy(c1[c],mat[i][a]);
c++; a++;
}
while(b<co)
{
c1[c]=malloc(strlen(mat[i+1][b])*sizeof(char));
strcpy(c1[c],mat[i+1][b]);
c++; b++;
}
}
for(i=0;i<(r*c);i++)
{
printf("Mat ordered : %s \n",c1[i]);
}
}
【问题讨论】:
-
请将矩阵的定义添加到您的问题中。注意:你 malloc 1 字节太少了。注意2你为什么要malloc,你可以参考原始字符串,而不是......