这里我尝试使用内置排序功能。 's'是存储索引的数组。我试图根据后缀字符串对此数组进行排序。如果我使用qsort()函数,它工作正常。但是一旦sort()使用它就只对s数组进行排序,就不会根据str中的后缀识别排序。请建议我对排序功能进行适当的更改。 qsort()函数在注释中表示。 这是我的代码
string str;
int s[50005];
long long l;
// for qsort()
int cmp(const void *a,const void *b)
{
return (strcmp((str+ *((int*)a)),(str+ *((int*)b))));
}
//对于sort()这不能正常工作
int cmp1(int a,int b)
{
return (strcmp((str.c_str()+ a),(str.c_str()+ b)));
}
后缀数组的代码
void suffix_array(int n)
{
int i;
//initially 's' is initialized with all index
for(i=0;i<n;i++)
s[i]=i;
// qsort(s,n,sizeof(int),cmp); this works fine
sort(s,s+n,cmp1);
}
主要功能
int main()
{
int n,c;
scanf("%d",&n);
while(n--) {
cin>>str;
//scanf("%s",str);
l = str.length();
suffix_array(l);
for(int i=0;i<l;i++)
cout<<s[i]<<" ";
}
return 0;
}