本人刚接触数据结构,程序问题老是出错,求大神指点迷津!
#include<iostream>
using namespace std;
#define MaxSize 100
typedef struct sqrt
{
char data[MaxSize];
int curlen;
}SqString;
//创建串
SqString* CreateSqString()
{
SqString *s;
int n,j;
char x;
s=new SqString();
cout<<"建立n个长度的串:输入n:"<<endl;
cin>>n;
for(j=0;j<n;j++){
cin>>x;
s->data[j]=x;
}
s->data[n]='\0';
s->curlen=n;
return s;
}
//串连接
SqString* StrConcat(SqString *s1,SqString *s2,SqString *s)
{
int length1,length2,i=0,j=0;
length1=s1->curlen;
length2=s2->curlen;
if(length1+length2>MaxSize-1){
cout<<"s长度不够"<<endl;
return 0;}
else
{
strcpy(s->data,s1->data);
for(i=0;i<=length2;i++)
{
s->data[length1+i]=s2->data[i];
}
s->curlen=length1+length2;
}
return s;
}
void OutputSqString(SqString *s)
{ int i=0;
while(s->data[i]!='\0')
cout<<(s->data[i++]);
}
//求子串
SqString* StrSub(SqString* t,SqString* s,int i,int length)
{
int j;
int slength=s->curlen;
if(length>slength-i+1
[解决办法]
i<0
[解决办法]
length<0){
cout<<"ERROR!"<<endl;
return 0;}
else{
for( j=0;j<length;j++)
t->data[j]=s->data[i+j-1];
t->data[j]='\0';
return t;
}
}
void main()
{
SqString *s1,*s2;
cout<<"创建串s1:"<<endl;
s1=CreateSqString();
OutputSqString(s1);
cout<<endl;
cout<<"创建串s2:"<<endl;
s2=CreateSqString();
OutputSqString(s2);
cout<<endl;
cout<<"连接串s1和s2,并存入s:"<<endl;
SqString *s;
s=new SqString();
s=StrConcat(s1,s2,s);
OutputSqString(s);
cout<<endl;
cout<<"求串s1的子串:输入子串的起始位置及长度:"<<endl;
int i,length;
SqString *t;
t=new SqString();
cin>>i>>length;
t=StrSub(t,s1,i,length);
cout<<"子串为"<<endl;
OutputSqString(t);
}
//串连接
SqString* StrConcat(SqString *s1,SqString *s2,SqString *s)
{
int length1,length2,i=0,j=0;
length1=s1->curlen;
length2=s2->curlen;
if(length1+length2>MaxSize-1){
cout<<"s长度不够"<<endl;
return 0;}
else{
while(s1->data[j]!=NULL)
{
s->data[j]=s1->data[j];
j++; //原来那样写之后,每执行一次,j+2;
}
while(s2->data[i]!=NULL)
s->data[j++]=s2->data[i++];
}
s->data[j]=NULL;
s->curlen=length1+length2;
return s;
}
//串连接
int StrConcat(SqString &s1,SqString &s2, SqString &s)
{
int length1,length2,i=0,j=0;
length1=s1.curlen;
length2=s2.curlen;
if(length1+length2>MaxSize-1)
{
cout<<"s长度不够"<<endl;
return 0;
}
else
{// 根据你的原意,分解开,更容易理解
while(s1.data[i] != '\0') // 可以直接copy, 不要这么复杂
{
s.data[i] = s1.data[i];
i++;
}
while(s2.data[j]!='\0')
{
s.data[i]=s2.data[j];
j++;
i++;
}
}
s.curlen=length1+length2;
return 1;
}
SqString s ;
memset(&s,0,sizeof(SqString)); //
StrConcat(s1,s2,s);