后缀数组排序功能

时间:2016-06-27 12:04:27

标签: c++ sorting suffix-tree suffix-array

这里我尝试使用内置排序功能。 '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;
    }

0 个答案:

没有答案