刚学到数据结构,关于串的问题,我怎么输不出串呢? 程序如下
#include<stdio.h>#include<malloc.h>#defineMaxSize100typedefstruct{chardata[MaxSize];i...
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int length;
}SqString;
void StrAssign(SqString &s,char cstr[]) //1 将一个字符串常量赋值给串s
{
int i;
for(i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.length=i;
}
void StrCopy(SqString &s,SqString t) //2 将串t复制到串s,s为引用型参数
{
int i;
for(i=0;i<t.length;i++)
s.data[i]=t.data[i];
s.length=t.length;
}
int StrEqual(SqString s,SqString t) //3 判断串相等
{
int same=1,i;
if(s.length!=t.length)
same=0;
else
for(i=0;i<s.length;i++)
if(s.data[i]!=t.data[i])
{
same=0;
break;
}
return same;
}
int StrLength(SqString s) //4 求串长
{
return s.length;
}
SqString Concat(SqString s,SqString t) //5 串连接
{
SqString str;
int i;
str.length=s.length+t.length;
for(i=0;i<s.length;i++)
str.data[i]=s.data[i];
for(i=0;i<t.length;i++)
str.data[s.length+i]=t.data[i];
return str;
}
SqString SubStr(SqString s,int i,int j) //6 求子串
{
SqString str;
int k;
str.length=0;
if(i<=0||i>s.length||j<0||i+j-1>s.length)
return str;
for(k=i-1;k<i+j-1;k++)
str.data[k-i+1]=s.data[k];
str.length=j;
}
SqString InsStr(SqString s1,int i,SqString s2) //7 插入串
{
int j;
SqString str;
str.length=0;
if(i<=0||i>s1.length+1)
return str;
for(j=0;j<i-1;j++)
str.data[j]=s1.data[j];
for(j=0;j<s2.length;j++)
str.data[i+j-1]=s2.data[j];
for(j=i-1;j<s1.length;j++)
str.data[s2.length+j]=s1.data[j];
return str;
}
SqString DelStr(SqString s,int i,int j) //8 从串s中删除子串
{
int k;
SqString str;
str.length=0;
if(i<=0||i>s.length||i+j>s.length+1)
return str;
for(k=0;k<i-1;k++)
str.data[k]=s.data[k];
for(k=i+j-1;k<s.length;k++)
str.data[k-j]=s.data[k];
str.length=s.length-j;
return str;
}
SqString RepStr(SqString s,int i,int j,SqString t) //9 串s中替换子串
{
int k;
SqString str;
str.length=0;
if(i<=0||i>s.length||i+j-1>s.length)
return str;
for(k=0;k<i-1;k++)
str.data[k]=s.data[k];
for(k=0;k<t.length;k++)
str.data[i+k-1]=t.data[k];
for(k=i+j-1;k<s.length;k++)
str.data[t.length+k-j]=s.data[k];
str.length=s.length-j+t.length;
return str;
}
void DispStr(SqString s) //10 输出串
{
int i;
if(s.length>0)
{
for(i=0;i<s.length;i++)
printf("%c ",s.data[i]);
printf("\n");
}
printf("hello!");
}
void main()
{
SqString MyString;
char cstr[10]={'a','b','c','d','e','f','g','h','i','j'};
int i;
for(i=0;cstr[i]!='\0';i++)
printf("%c ",cstr[i]);
StrAssign(MyString,cstr);
DispStr(MyString);
} 展开
#include<malloc.h>
#define MaxSize 100
typedef struct
{
char data[MaxSize];
int length;
}SqString;
void StrAssign(SqString &s,char cstr[]) //1 将一个字符串常量赋值给串s
{
int i;
for(i=0;cstr[i]!='\0';i++)
s.data[i]=cstr[i];
s.length=i;
}
void StrCopy(SqString &s,SqString t) //2 将串t复制到串s,s为引用型参数
{
int i;
for(i=0;i<t.length;i++)
s.data[i]=t.data[i];
s.length=t.length;
}
int StrEqual(SqString s,SqString t) //3 判断串相等
{
int same=1,i;
if(s.length!=t.length)
same=0;
else
for(i=0;i<s.length;i++)
if(s.data[i]!=t.data[i])
{
same=0;
break;
}
return same;
}
int StrLength(SqString s) //4 求串长
{
return s.length;
}
SqString Concat(SqString s,SqString t) //5 串连接
{
SqString str;
int i;
str.length=s.length+t.length;
for(i=0;i<s.length;i++)
str.data[i]=s.data[i];
for(i=0;i<t.length;i++)
str.data[s.length+i]=t.data[i];
return str;
}
SqString SubStr(SqString s,int i,int j) //6 求子串
{
SqString str;
int k;
str.length=0;
if(i<=0||i>s.length||j<0||i+j-1>s.length)
return str;
for(k=i-1;k<i+j-1;k++)
str.data[k-i+1]=s.data[k];
str.length=j;
}
SqString InsStr(SqString s1,int i,SqString s2) //7 插入串
{
int j;
SqString str;
str.length=0;
if(i<=0||i>s1.length+1)
return str;
for(j=0;j<i-1;j++)
str.data[j]=s1.data[j];
for(j=0;j<s2.length;j++)
str.data[i+j-1]=s2.data[j];
for(j=i-1;j<s1.length;j++)
str.data[s2.length+j]=s1.data[j];
return str;
}
SqString DelStr(SqString s,int i,int j) //8 从串s中删除子串
{
int k;
SqString str;
str.length=0;
if(i<=0||i>s.length||i+j>s.length+1)
return str;
for(k=0;k<i-1;k++)
str.data[k]=s.data[k];
for(k=i+j-1;k<s.length;k++)
str.data[k-j]=s.data[k];
str.length=s.length-j;
return str;
}
SqString RepStr(SqString s,int i,int j,SqString t) //9 串s中替换子串
{
int k;
SqString str;
str.length=0;
if(i<=0||i>s.length||i+j-1>s.length)
return str;
for(k=0;k<i-1;k++)
str.data[k]=s.data[k];
for(k=0;k<t.length;k++)
str.data[i+k-1]=t.data[k];
for(k=i+j-1;k<s.length;k++)
str.data[t.length+k-j]=s.data[k];
str.length=s.length-j+t.length;
return str;
}
void DispStr(SqString s) //10 输出串
{
int i;
if(s.length>0)
{
for(i=0;i<s.length;i++)
printf("%c ",s.data[i]);
printf("\n");
}
printf("hello!");
}
void main()
{
SqString MyString;
char cstr[10]={'a','b','c','d','e','f','g','h','i','j'};
int i;
for(i=0;cstr[i]!='\0';i++)
printf("%c ",cstr[i]);
StrAssign(MyString,cstr);
DispStr(MyString);
} 展开
2个回答
展开全部
目前凯旁只发现了一个
void StrAssign(SqString &s,char cstr[]) //1 将一个字符串常盯行橡量赋值给串s
{
int i;
for(i=0;cstr[i]!='\0';i++) //你的cstr[10]不是一个字符串,带绝不能用'\0'来判断是不是结束
void StrAssign(SqString &s,char cstr[]) //1 将一个字符串常盯行橡量赋值给串s
{
int i;
for(i=0;cstr[i]!='\0';i++) //你的cstr[10]不是一个字符串,带绝不能用'\0'来判断是不是结束
追问
已经定义了:
void StrAssign(SqString &s,char cstr[]) //1 将一个字符串常量赋值给串s
char cstr[10]={'a','b','c','d','e','f','g','h','i','j'};
追答
但你main里的的 cstr[10]只是一个字符数组,并且数组里没有'\0',所以传递给StrAssign的参数并没有以'\0'结束。
在StrAssign里的for(i=0;cstr[i]!='\0';i++) 实际上并不会到'j'就结束了,会直到在内存里遇到0为止,所以会出现错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询