这是一个C代码,用于从每个索引开始对大字符串的子字符串进行排序,但我无法理解如何在代码中对数组a进行排序。
据我所知:
'add_font_awesome'()
提交给a[i]
,因此它创建了n个数组,但不是
&c[i]
?自&a[i][1] == &a[i+1][0]
以来a[i] = &c[i]
是否正确?
如果没有,这看起来像是一种更快的方式来创建n(原始的长度 字符串)数组,而不实际复制它。这是真的吗?
我的代码
&a[i][0] == &c[i]
答案 0 :(得分:0)
我猜测pstrcmp
是strcmp
的包装器,它比较两个指向char指针的指针。类似的东西:
int pstrcmp(const void *a, const void *b) {
return strcmp(*(char**)a, *(char**)b);
}
回答你的问题,
&a[i][1] == &a[i+1][0]
。它们都指向i + 1
的{{1}} - st字符。c
。&a[i][0] == &c[i]
字符串的指针,但有一个问题:如果你改变了任何字符串(比如最后一个字符),你就会改变更多的字符串。所以这些字符串不是独立的。从概念上讲,n
是从位置a[i]
开始的c
后缀的指针。然后,程序根据它们指向的字符串的值对i
进行排序。因此,对于a
,您将获得c = "abacaba"
。
请注意,有更快的方法可以构建suffix arrays。
答案 1 :(得分:0)
在此代码中,我不会看到子字符串,因为您不构建任何子字符串。
从技术上讲,a
是char
类型的指针数组,可以使其成为字符串数组,但是您将c
与a
的关联方式实际上a
}是c
的索引
在循环内部,您通过char填充索引char。稍后当您对a
进行排序时,您会对索引进行排序。
索引的问题在于,您无法将其打印为字符串,因为它不是char *
printf格式修饰符所期望的%s
,而是{ {1}}。仅这一点就应该警告你一些怪异的东西。我看到你把这个问题作为硬编码char **
作为参数来回避这个问题,但是使用什么索引的唯一问题是,你说错了。
我对您的代码进行了轻微编辑,以及如何打印出已排序的数组。如果你认为不做你想做的事情,那么你想要什么和你的代码之间有什么误解(除了最后a[1]
)。
printf