c++运行时遇到问题

ccsuwz 2007-05-01 06:49:59
#include <iostream.h>
#include <string.h>

class String
{
public:
~String(){delete[] str;}
int SetStr(int l,char *s);
int SetStr(char *s);
//int Set(char *s);
int GetLen(){return len;}
char *GetStr(){return str;}
void Print(){cout<<str<<endl;}
private:
int len;
char *str;
};
class EditString:public String
{
public:
void MoveCursor(int off){cursor=off;}
int Add(String *s);
int Replace(String *s);
void Delete(int pos);
int GetCursor(){return cursor;}
private:
int cursor;
};
int String::SetStr(int l,char *s)
{
len=l;
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
}
int String::SetStr(char *s)
{
len=strlen(s);
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
}
int EditString::Add (String *s)
{
int n,k,m;
char *cp, *pt;
n=s->GetLen();
pt=s->GetStr();
cp=this->GetStr();
m=this->GetLen();
char *news=new char[n+m+1];
for(int i=0;i<cursor;i++)
news[i]=cp[i];
k=i;
for(int j=0;j<n;i++,j++)
news[i]=cp[j];
news[i]='\0';
SetStr(news);
delete news;
return cursor;
}

int EditString::Replace(String *s)
{
int n,m;
char *pt, *news;
n=s->GetLen();
pt=s->GetStr();
m=this->GetLen();
news=new char[m>n+cursor?m+1:n+cursor+1];
news=this->GetStr();
for(int i=cursor,j=0;i<n+cursor;j++,i++)
news[i]=pt[j];
if(m<n+cursor)news[i]='\0';
cursor=i;
SetStr(news);
delete news;
return cursor;
}

void EditString::Delete(int pos)
{
int m;
char *cp, *news;
cp=this->GetStr();
m=this->GetLen();
for(int i=cursor;i<m;i++)
cp[i]=cp[i+pos];
cp[i]='\0';
}

void main()
{
String s1;
EditString s2;
char *cp;
s1.SetStr("Object-oriented Programming!");
// s1.Print();
cp=s1.GetStr();
s2.Print();
s2.MoveCursor(16);
s1.SetStr("Windows");
s2.Add(&s1);
s2.Print();
s2.MoveCursor(7);
s2.Delete(9);
s2.Print();
s2.SetStr("TTT");
s2.Replace(&s1);
s2.Print();
}
这是程序有问题还是其余的原因啊
谢谢
...全文
278 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaeldg 2007-05-02
  • 打赏
  • 举报
回复
你的string类也没有构造函数呀!
michaeldg 2007-05-02
  • 打赏
  • 举报
回复
void Print(){cout<<str<<endl;}
有问题
要想连续输出一个数组得要运算符重载!
ccsuwz 2007-05-02
  • 打赏
  • 举报
回复
#include <iostream.h>
struct node
{
char data;
struct node *next;
};
typedef struct node * link;
class Tdlb
{
private:
link head;
public:
Tdlb(int a[],int n);
void inver();
char get(int i);
void inst(int loc,char el);
char dele(int i);
void prnt();
};
Tdlb::Tdlb(int a[],int n)
{
link p,s;
int i;
head=new struct node;
s=new struct node;
s=NULL;
head->next=NULL;

for(i=n-1;i>=0;i--)
{

p=new struct node;
p->data=a[i];
p->next=head->next;
head->next=p;
if(s==NULL)
s=head;
};
p->next=NULL;
head=s;
delete s;
}

void Tdlb::prnt()
{
link p;
p=new struct node;
p=head;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
// delete p;
}

void main()
{
int a[20]={64,46,654,2,21,31,8,4,1516,11,3165,23,12654,3};
Tdlb example(a,10);
example.prnt();
}
我已经改成这样了 还是不行啊
michaeldg 2007-05-02
  • 打赏
  • 举报
回复
我已经对你的程序进了修改,修改处都加了注释,但是Replace()函数还有问题,代码如下:

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

class String
{
friend ostream &operator<<(ostream & ,const String &);
public:

~String(){delete []str;}
int SetStr(int l,char *s);
int SetStr(char *s);
//int Set(char *s);
int GetLen(){return len;}
char *GetStr(){return str;}

void Print(){cout<<str<<endl;}
private:
int len;
char *str;
};
class EditString:public String
{
public:
void MoveCursor(int off){cursor=off;}
int Add(String *s);
int Replace(String *s);
void Delete(int pos);
int GetCursor(){return cursor;}
private:
int cursor;
};

//以下为对<<的运算符重载
ostream & operator << (ostream & output ,const String & fs)
{
output<<fs;
return output;
}

/*int String::SetStr(int l,char *s)
{
len=l;
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
} */
int String::SetStr(char *s)
{
len=strlen(s);
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
}
int EditString::Add (String *s)
{
int n,k,m;
char *cp, *pt;
n=s->GetLen();
pt=s->GetStr();
cp=this->GetStr();
m=this->GetLen();
char *news=new char[n+m+1];
for(int i=0;i<cursor;i++)
news[i]=cp[i];
k=i;

for(int j=0;j<n;i++,j++)
news[i]=pt[j]; //“cp[j]应该改为pt[j]”



for(;i<n+m+1,k<m;i++,k++) //这两行是将要添加的数组的后面部分加上去
news[i]=cp[k];

news[i]='\0';
SetStr(news);
delete news;
return cursor;
}

int EditString::Replace(String *s)
{
int n,m;
char *pt, *news;
n=s->GetLen();
pt=s->GetStr();
m=this->GetLen();
news=new char[m>n+cursor?m+1:n+cursor+1];
news=this->GetStr();
for(int i=cursor,j=0;i<n+cursor;j++,i++)
news[i]=pt[j];
if(m<n+cursor)news[i]='\0';
cursor=i;
SetStr(news);
delete news;
return cursor;
}

void EditString::Delete(int pos)
{
int m;
char *cp, *news;
cp=this->GetStr();
m=this->GetLen();
for(int i=cursor;i<m;i++)
cp[i]=cp[i+pos];
cp[i]='\0';
}

void main()
{
String s1;
EditString s2;
char *cp;
s1.SetStr("Object-oriented Programming!");
//s1.Print();
cp=s1.GetStr();
s2.SetStr("liaoshuilvshiwotaihao"); //这个地方对是s2初始化
s2.Print();
s2.MoveCursor(16);
s1.SetStr("Windows");
s1.Print();
s2.Add(&s1);
s2.Print();
s2.MoveCursor(7);
s2.Delete(9);
s2.Print();
s2.SetStr("TTTTTTTT");
s2.Print();
s2.Replace(&s1); //Repace 函数有问题,还望其他高手指点!
s2.Print();
}
ccsuwz 2007-05-02
  • 打赏
  • 举报
回复
楼上可以帮我说明一下怎么样去运算符重载!
构造函数系统可以是缺省值吧
yuelinsoft 2007-05-01
  • 打赏
  • 举报
回复
s=NULL;
s是个空指针,s->next=NULL;肯定非法。
ccsuwz 2007-05-01
  • 打赏
  • 举报
回复
不知道怎么称呼楼上的
真的很谢谢你
s=new struct node;//这是分配空间啊
我还把s->next=NULL;这一句cut了
但还是没有解决
yuelinsoft 2007-05-01
  • 打赏
  • 举报
回复
to ccsuwz()
s=NULL;
head->next=NULL;
s->next=NULL;//s没有分配空间,取成员地址当然非法了
ccsuwz 2007-05-01
  • 打赏
  • 举报
回复


那应该是我的vc没装好或我的系统有问题咯?
谢谢
ccsuwz 2007-05-01
  • 打赏
  • 举报
回复
#include <iostream.h>
struct node
{
char data;
struct node *next;
};
typedef struct node * link;
class Tdlb
{
private:
link head;
public:
Tdlb(int a[],int n);

void prnt();
};
Tdlb::Tdlb(int a[],int n)
{
link p,s;
int i;
head=new struct node;
s=new struct node;
s=NULL;
head->next=NULL;
s->next=NULL;
for(i=n-1;i>=0;i--)
{

p=new struct node;
p->data=a[i];
p->next=head->next;
head->next=p;
if(s==NULL)
s=head;
};
head=s;
delete s;
}

void Tdlb::prnt()
{
link p=head;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}

}



void main()
{
int a[20]={64,46,654,2,21,31,8,4,1516,11,3165,23,12654,3};
Tdlb example(a,10);
example.prnt();
}
这个为什么也有错误啊
谢谢大家
yuelinsoft 2007-05-01
  • 打赏
  • 举报
回复
手上没有vc,devcpp下测试成功
ccsuwz 2007-05-01
  • 打赏
  • 举报
回复
谢谢咯
但是还是有错误
说是dubug error
这是不是我自己电脑系统的问题
yuelinsoft 2007-05-01
  • 打赏
  • 举报
回复
int EditString::Add (String *s)有问题。
还有s2.Print();s2没有初始化。要么先s2.SetStr("hello");要么加一个默认构造。

#include <iostream>
#include <string.h>
using namespace std;

class String
{
public:
~String(){delete[] str;}
int SetStr(int l,char *s);
int SetStr(char *s);
//int Set(char *s);
int GetLen(){return len;}
char *GetStr(){return str;}
void Print(){cout<<str<<endl;}
private:
int len;
char *str;
};
class EditString:public String
{
public:
void MoveCursor(int off){cursor=off;}
int Add(String *s);
int Replace(String *s);
void Delete(int pos);
int GetCursor(){return cursor;}
private:
int cursor;
};
int String::SetStr(int l,char *s)
{
len=l;
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
}
int String::SetStr(char *s)
{
len=strlen(s);
if(!str)delete str;
str=new char[len+1];
strcpy(str,s);
return len;
}
int EditString::Add (String *s)
{
int n,k,m;
char *cp, *pt;
n=s->GetLen();
pt=s->GetStr();
cp=this->GetStr();
m=this->GetLen();
char *news=new char[n+m+1];
int i;
for(i=0;i<m;i++)
news[i]=cp[i];
int j;
for(j=0;j<n;j++)
news[i+j]=pt[j];
news[i+j]='\0';
SetStr(news);
delete news;
return cursor;
}

int EditString::Replace(String *s)
{
int n,m;
char *pt, *news;
n=s->GetLen();
pt=s->GetStr();
m=this->GetLen();
news=new char[m>n+cursor?m+1:n+cursor+1];
news=this->GetStr();
int i, j;
for(i=cursor,j=0;i<n+cursor;j++,i++)
news[i]=pt[j];
if(m<n+cursor)news[i]='\0';
cursor=i;
SetStr(news);
delete news;
return cursor;
}

void EditString::Delete(int pos)
{
int m;
char *cp, *news;
cp=this->GetStr();
m=this->GetLen();
int i;
for(i=cursor;i<m;i++)
cp[i]=cp[i+pos];
cp[i]='\0';
}

int main()
{
String s1;
EditString s2;
char *cp;
s1.SetStr("Object-oriented Programming!");
s1.Print();
cp=s1.GetStr();
s2.SetStr("hello");
s2.Print();
s2.MoveCursor(16);
s1.SetStr("Windows");
s2.Add(&s1);
s2.Print();
s2.MoveCursor(7);
s2.Delete(9);
s2.Print();
s2.SetStr("TTT");
s2.Replace(&s1);
s2.Print();
}
ccsuwz 2007-05-01
  • 打赏
  • 举报
回复
?
不懂
如果有问题的话 要怎么检查
我是菜鸟
不好意思
expter 2007-05-01
  • 打赏
  • 举报
回复
看看指针又问题没

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧