#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 *
交换,但情况并不好。
谢谢!
答案 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结束