打印最长的字符串重复M次

时间:2010-07-23 07:38:29

标签: c++

这里是打印最长字符串重复M次的代码

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

using namespace std;
#define M 1
#define  MAXN  5000000
char c[MAXN],*a[MAXN];
int pstrcmp( char **p,char **q){  return strcmp(*p,*q) ;}
int comlen(char *p,char *q){

    int i=0;
     while  (*p &&(*p++==*q++)){
         i++;
     }


      return i;


}
int main(){

    int maxlen=-1;
     int maxi; 
      int ch,n=0; 
       while ((ch=getchar())!=EOF){
           a[n]=&c[n];
            c[n++]=ch;
       }
       c[n]=0;
       qsort(a,n,sizeof( char *),pstrcmp);
         for (int i=0;i<n-M;i++) 
               if (comlen(a[i],a[i+M])>maxlen){
                    maxlen=comlen(a[i],a[i+M]);
                    maxi=i;
               }
               printf("%.*s\n",maxlen,a[maxi]);



     return 0;
}

但这是错误的

1>c:\users\david\documents\visual studio 2010\projects\longest_repeted\longest_repeated.cpp(33): error C2664: 'qsort' : cannot convert parameter 4 from 'int (__cdecl *)(char **,char **)' to 'int (__cdecl *)(const void *,const void *)'
1>          None of the functions with this name in scope match the target type

3 个答案:

答案 0 :(得分:1)

您的排序功能需要(void*,void*),而不是(char**,char**)。如果需要,可以将指针转换为sort func中的其他内容,但它们需要是指针,而不是指针指针。

答案 1 :(得分:1)

更改

int pstrcmp( char **p,char **q){  return strcmp(*p,*q) ;}

int pstrcmp(const void *p, const void *q)
{  
  return strcmp(*reinterpret_cast<const char**>(p), *reinterpret_cast<const char**>(q));
}

答案 2 :(得分:0)

看起来pstrcmp的签名是错误的 - 应该使用指针,而不是指针指针。