使用std :: sort从'char'无效转换为'char *'

时间:2014-09-27 08:45:36

标签: c++ string sorting char stl-algorithm

 #include <stdio.h>
   #include <algorithm>
   #include <string.h>
   using namespace std;
   #define MAX 1000000
   char s[MAX+1][21],sir[MAX+1];

   bool cmp( char a[21],char b[21]) {
      return strcmp(a, b) < 0;
    }

    int main()
    {
        FILE *fin,*fout;

        fin=fopen("rocker.in","r");
        fout=fopen("rocker.out","w");

        int i,j,n,k,l,ind;
        char ch;

        fscanf(fin,"%d%d",&n,&k);
        fscanf(fin,"%c",&ch);
        fgets(sir,MAX,fin);

        for(i=0;i<k;i++)
            s[0][i]=sir[i];
        ind=k-1;
        for(i=1;i<n-k+1;i++)
        {
            for(j=0;j<k-1;j++)
                s[i][j]=s[i-1][j+1];
            s[i][k-1]=sir[++ind];
        }

        sort(s[0],s[n-k+1],cmp);

        for(i=0;i<n-k+1;i++)
        {
            j=0;
            while(j<k&&s[i][j]==s[i+1][j])
                j++;
            j--;
            fprintf(fout,"%d\n",j);
        }

        return 0;
    }

这样做总能让我犯这个错误,我无法找到解决问题的方法。

  

错误:来自&#39; char&#39;的转换无效到#char;&#39; [-fpermissive] |

我认为这与我将字符串作为参数传递的方式有关。

我已尝试将char a[21]char *交换,但情况并不好。

谢谢!

2 个答案:

答案 0 :(得分:0)

你这样做:

char s[MAX+1][21];
std::sort(s[0], s[n-k+1], cmp);

sort函数将交换数组中的元素以使其排序。但它只能交换包括指针在内的简单类型,而不能交换数组。例如,这将失败并且不会复制21个字节:

s[2] = s[1]; // error

相反,你必须使用指针为它分配内存。

char * s[MAX+1];
for(int i=0; i<MAX+1; i++)
    s[i] = new char[21];

现在s[i]只是一个指针,可以与数组中的其他条目交换。

答案 1 :(得分:0)

好吧,我认为sort((char **)s,(char **)(&amp; s [n-k + 1]),cmp);是你想要做的。它可以编译但它无法按预期运行。你应该知道bool cmp(char a [21],char b [21])完全等于bool cmp(char * a,char * b)。并且字符串比较期望\ 0结束