c-这段代码哪里出问题了??

问题描述

这段代码哪里出问题了??

编译通过,但是运行时打印出的是0,请问哪里出错了?

 //串的动态堆分配存储
//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]='';
    S.length=0;
    S.size=MAXSIZE;
}

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

//字符串复制
void StrAssign(HString &S,HString T){
  if(S.ch) free(S.ch);
    if(!T.ch) {exit(1);}
    else{
        if(!(S.ch=(char*)malloc(StrLength(T)*sizeof(char)))) {exit(1);}
        for(int i=1;i<=StrLength(T);i++){
            S.ch[i]=T.ch[i];
        }
        S.length=T.length;
        S.size=T.size;
    }
}

//若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后面
void 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]='';
    S1.length=S1.length+S2.length;
}

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]='';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]='';
        sub.length=len;
    }

    return sub;
}

//在串s中删除与所有与串t相同的子串,并返回删除的次数
int Delet_SubString(HString &S,HString T){
    HString sub;
    HString lsub;
    InitString(sub);
    int m=StrLength(S);
    int n=StrLength(T);
    int i=1,count=0;
    while(i<=m){
        StrAssign(sub,SubString(S,i,n));
        if(StrCompare(sub,T)==0){//匹配相等
            InitString(sub);
            InitString(lsub);
            Concat(sub,lsub=SubString(S,1,i-1));
            Concat(sub,lsub=SubString(S,i+n,m-i-n+1));
            StrAssign(S,sub);
            n=StrLength(S); //要注意,操作完一次后s的值改变了
            count++;
        }
        else {
            i++;
        }
    }
    return count;
}

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[]={"abcdefgabcimcseeokabcsf"};
    char s2[]={"bc"};
    for(int i=1;i<=S.size;i++){S.ch[i]=s1[i];}
    for(int i=1;i<=T.size;i++){T.ch[i]=s2[i];}
    int n=Delet_SubString(S,T);
    PrintString(S);
    printf("%dn",n);
    return 0;
}

解决方案

http://zhidao.baidu.com/link?url=3kCTUhd1skaeLLa5XFLNCE9atqiw89mc_Dcb8EW9UUa5aLbDAnW9w4AyxK8zkN7oVwrsFsTVSf7y2XbQt5az8e51sxibkFH-IkT-B5Yg8Aq

时间: 2024-08-30 02:45:09

c-这段代码哪里出问题了??的相关文章

代码提示出错-请问我这段代码哪里出错了,为什么总是异常,我是个新手

问题描述 请问我这段代码哪里出错了,为什么总是异常,我是个新手 package control; import javax.swing.JFrame public class DebugTest { public static void main(String[] args) { int[] ints= new int[20]; try { for (int i=0; i < 20; i ++) { ints[i] = i+1; Ststem.out.println(i+1); } } catc

for-谁帮我改改这段代码问题出在哪里?

问题描述 谁帮我改改这段代码问题出在哪里? int score; //每门课成绩 int sum = 0; //成绩之和 double avg = 0.0; //平均分 Console.WriteLine(""请输入学生姓名:""); string name = Console.ReadLine(); for (int i = 0; i < 5; i++) { Console.Write(""请输入五门课中第""+(i+

c语言-求大神帮帮看看这段代码那里出错了。谢谢

问题描述 求大神帮帮看看这段代码那里出错了.谢谢 刚刚学习,什么都不懂,今天第一次练手,却出现错误,我看了半小时楞是没看出来哪里出错了,求大家帮帮看看.谢谢了. 解决方案 要使用system()函数,就得加头文件,注意你源代码文件保存的后缀名为.c文件,main()函数下面的第一行有个分号 ; 解决方案二: 第一行system那行,最后加分号 解决方案三: [VB.NET]大家看看,这段代码出错了,要怎么改,谢谢,,在线等,当天结贴!!!!!! 解决方案四: system("color 5&qu

java-初学Java,想知道这段代码哪里出错了

问题描述 初学Java,想知道这段代码哪里出错了 package text; public class text1 { int a; int b; public void print() { System.out.println("a="+a+",b="+b); } } class text2 { public static void main(String[] args) { text1 x=new text2(); x.a=111; x.b=222; x.pri

调试-这段代码哪里出问题了?

问题描述 这段代码哪里出问题了? /串的动态堆分配存储//by zoe#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#define MAXSIZE 100using namespace std;typedef struct { char *ch; int length; int size;}HString;void InitString(HString &

数据-求大神帮帮我看看这段代码哪里出错了

问题描述 求大神帮帮我看看这段代码哪里出错了 Sub save_in_array(ByVal rs As Data.DataTable, ByVal arr(,) As String, ByVal col As Integer) Dim n As Integer Dim j As Integer Dim i As Integer n = row_number(rs) ' 用来求数据库中有数据的行数,这里的n返回值是3 ReDim arr(n - 1, col - 1) For i = 0 To

c-请教一下这段代码哪里出错了?

问题描述 请教一下这段代码哪里出错了? #include <stdio.h> #include <stdlib.h> typedef int Elemtype; typedef struct node{ Elemtype elem; struct node *next; }*top; int m=sizeof(struct node); struct node *Push(struct node *top,Elemtype x){ struct node *p; p=(struct

这段代码问题出在哪里?

问题描述 我有一个数据表ttx有3个字段,例如为:IDNAMEPATT1WWEE2RRYY.....我现在将数据表中的NAME字段绑定到了ComboBox控件,我想实现这样的功能,例如当ComboBox控件选择WW时,TextBox控件里的值为EE,当ComboBox控件选择RR时,TextBox控件里的值为YY,可是现在的情况是我必须选两次ComboBox控件里的内容,TextBox控件里的值才会变代码如下:请大家指点一下为什么?usingSystem;usingSystem.Collecti

请教这段代码编码出问题了咋改

问题描述 /***Simplecharactersubstitutionwhichcleansall锟charsfromagivenString.*/publicstaticStringcleanField(Stringvalue){returnvalue.replaceAll("锟,"");}小白想问一下,不是伸手党,求指导 解决方案 解决方案二:是出现乱码吗?解决方案三:少个双引号--解决方案四:Stringvalue="锟3333";System.o