ZoeGreenn 2016-03-02 10:07 采纳率: 0%
浏览 2399

这段代码哪里出问题了?

 /串的动态堆分配存储
//by zoe

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>

#define MAXSIZE 100
using namespace std;

typedef struct {
    char *ch;
    int length;
    int size;
}HString;

void InitString(HString &S){
    S.ch=new char[MAXSIZE];
    if(S.ch==NULL) {cerr<<"error!\n";exit(1);}
    S.ch[0]='\0';
    S.length=0;
    S.size=MAXSIZE;
}

//字符串复制
void StrAssign(HString &S,char *chars){
    S.length=strlen(chars);
    strcpy(S.ch,chars);
}

int StrLength(HString S){
    return S.length;
}

//若s>t,则返回值大于零;s=t,返回值等于0;s<t,返回小于零
int StrCompare(HString S,HString T){
    for(int i=0;i<S.length&&i<T.length;i++){
        if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];
    }
    return S.length-T.length;
}

//将s2连接在s1后面
HString Concat(HString &S1,HString &S2){
  int i=0,j;
    if((S1.length+S2.length)>MAXSIZE){
        char *dest=new char[S1.length+S2.length+1];
        if(dest==NULL) {cerr<<"error!\n";exit(1);}
        char *temp=dest;
        for(int i=0;i<S1.length;i++) dest[i]=S1.ch[i];
        delete [] S1.ch;
        S1.ch=temp;
        S1.size=S1.length+S2.length;
    }
    for(int j=0;j<S2.length;j++,i++) S1.ch[i]=S2.ch[j];
    S1.ch[i]='\0';
    S1.length=S1.length+S2.length;
    return S1;
}

HString SubString(HString S,int pos,int len ){
    HString sub;
    sub.ch=(char*)malloc(len*sizeof(char));
    if(!sub.ch) {cerr<<"error!\n";exit(1);}
    if(pos>=S.length||pos<0||len<0||len>S.length){
        sub.ch[0]='\0';sub.length=0;
    }
    else{
        if(pos+len-1>S.length) len=S.length-pos;
        for(int i=0,j=pos;i<len;i++,j++) sub.ch[i]=S.ch[j];
        sub.ch[len]='\0';
        sub.length=len;
    }
    return sub;
}

//在串s中删除与所有与串t相同的子串,并返回删除的次数
int Delet_SubString(HString &S,HString T){
    int n=0;
    for(int i=1;i<=(StrLength(S)-StrLength(T)+1);i++){
        if(!StrCompare(SubString(S,i,StrLength(T)),T)){
            HString head,tail;
            StrAssign(head,SubString(S,1,i-1));
            StrAssign(tail,SubString(S,i+StrLength(T),StrLength(S)-i-StrLength(T)+1));
            StrAssign(S,Concat(head,tail));
            n++;
        }
    }
    return n;
}

void PrintString(HString S){
    for(int i=0;i<S.length;i++){
        printf("%c ",S.ch[i]);
    }
}

int main(){
    HString S,T;
    InitString(S);
    InitString(T);
    char s1[]={"abcdefgabcimcseeokabsf"};
    char s2[]={"ab"};
    StrAssign(S,s1);
    StrAssign(T,s2);
    int n=Delet_SubString(S,T);
    PrintString(S);
    printf("%d\n",n);
    return 0;
}

编译后输出:

 wangxiaoxiaodeMacBook-Air:Data-Structures-and-Algorithm wangxiaoxiao$ g++ HString.cpp -std=c++11
HString.cpp:84:4: error: no matching function for call to 'StrAssign'
                        StrAssign(head,SubString(S,1,i-1));
                        ^~~~~~~~~
HString.cpp:27:6: note: candidate function not viable: no known conversion from
      'HString' to 'char *' for 2nd argument
void StrAssign(HString &S,char *chars){
     ^
HString.cpp:85:4: error: no matching function for call to 'StrAssign'
                        StrAssign(tail,SubString(S,i+StrLength(T),StrLen...
                        ^~~~~~~~~
HString.cpp:27:6: note: candidate function not viable: no known conversion from
      'HString' to 'char *' for 2nd argument
void StrAssign(HString &S,char *chars){
     ^
HString.cpp:86:4: error: no matching function for call to 'StrAssign'
                        StrAssign(S,Concat(head,tail));
                        ^~~~~~~~~
HString.cpp:27:6: note: candidate function not viable: no known conversion from
      'HString' to 'char *' for 2nd argument
void StrAssign(HString &S,char *chars){
     ^
3 errors generated.

函数StrAssign明明定义了啊,它的参数为什么不对呢?
多谢!

  • 写回答

5条回答 默认 最新

  • threenewbee 2016-03-02 10:31
    关注

    StrAssign(head,SubString(S,1,i-1));
    其中SubString(S,1,i-1)这里返回的是HString不是char *

    可是你只有
    void StrAssign(HString &S,char *chars)

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况