c语言串的问题
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
typedef struct
{
char *ch;
int length;
}Str;
void intiStr(Str *p)
{
p->ch=NULL;
}
int Isempty(char *p)
{
return(p==NULL);
}
void concat(Str *p,char *a, char *b)
{
int j,i;
p->ch=(char *)malloc((sizeof(a)+sizeof(b))*sizeof(char));
for(j=0;j<strlen(a);j++)
p->ch[j]=a[j];
for(i=0;i<strlen(b);i++,j++)
p->ch[j]=b[i];
p->ch[j]='\0';
p->length=strlen(a)+strlen(b);
}
void print(Str *p)
{
if(Isempty(p->ch))
{
printf("空,不合法\n");
return;
}
else
printf("%s\n",p->ch);
}
void insertStr(Str *p,int pos, char *c)
{
int i,length;
length=strlen(c);
p->ch=(char *)realloc(p->ch,(p->length+length)*sizeof(char));
for(i=pos-1;i<p->length-1;i++)
p->ch[i+length]=p->ch[i];
for(i=0;i<=length-1;i++)
p->ch[pos-1+i]=c[i];
}
void main()
{
int i;
Str d;
char a[20],b[20],c[20];
int pos;//串中的第几个字符
intiStr(&d);
printf("请输入你要输入的两个字符窜:");
scanf("%s %s",a,b);
printf("1.连接字串\n");
printf("2.输出字串\n");
printf("3.插入字串\n");
printf("0.退出\n");
do
{
printf("请输入你要选择的功能的编号:");
scanf("%d",&i);
switch(i)
{
case 1:concat(&d,a,b);break;
case 2: print(&d);break;
case 3:printf("请输入你要插入的字串以及所插的地方:");scanf("%s %d",c,&pos);insertStr(&d,pos,c);break;
default :printf("error\n");break;
}
}
while(i!=0);
}就是插入在输出的时候有问题,有点纠结,希望指点一下 .
[解决办法]
抱歉
if(dst
[解决办法]
src)return NULL;
改成if(!dst
[解决办法]
!src)return NULL;才对
void insertStr(Str *p,int pos, char *c)
{
int i,length;
length=strlen(c);
p->ch=(char *)realloc(p->ch,(p->length+length)*sizeof(char));
//数据从后向前逐个向后搬移,才不会把重叠区数据冲掉
// 假设 原始数据 20个 从第5个开始插入10个
// 前四个数据不动第15个数据是最后一个位置。
//5+ 10 =15
//需要要搬动 第5到20共15个数据。
//第5个数据刚好搬到第15个数据的位置。而第15个数据还没有搬走,就被第一次的搬移覆盖了。
//第15次搬运的数据,不是原始数据的第15个数据,而是第一次的搬过来的第五个数据。
//这样程序逻辑就错了。所以下面的程序就达不到数据依次向后搬移的目的了。
for(i=pos-1;i<p->length-1;i++)
p->ch[i+length]=p->ch[i];
这个插入问题不大,问题是,插入后,后面的数据错了!!!!
for(i=0;i<=length-1;i++)
p->ch[pos-1+i]=c[i];
}