首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

本人刚接触数据结构,程序有关问题老是出错,求大神指点迷津

2013-03-28 
本人刚接触数据结构,程序问题老是出错,求大神指点迷津!求大神指点,是程序问题还是硬件问题啊?感激不尽!数

本人刚接触数据结构,程序问题老是出错,求大神指点迷津!

求大神指点,是程序问题还是硬件问题啊?感激不尽!                                数据结构                  c++              
[解决办法]

#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);

}


帮楼主改的 给分吧。。 给点建议就是楼主C和C++混着写(概念不清晰,比如好几个指针都没有实例化,所以才野指针报错)。。 小错误很多,代码很不美观整洁。。
建议多编程多看别人的代码多断点调试~本人刚接触数据结构,程序有关问题老是出错,求大神指点迷津
[解决办法]
//串连接
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;
}

头文件里的错误
[解决办法]
不要用NULL来代替'\0'...NULL表示空的不是指0.
[解决办法]

//串连接
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);

热点排行