数据结构——字符串的插入问题
插入操作:将串s1插入到串s中的第i个位置,并产生新串s2.但是出现了输出时,插入的那一部分出现了乱码。程序代码:
/* * 建立串s="abcdefghijklmn"和串s1="xyz" * 输出s * 输出串s的长度 * 在串s的第9个字符位置插入串s1而产生串s2 * 输出串s2 * 删除串s中的第2个字符开始的5个字符而产生的串2 * 输出串s2 * 将串s的第2个字符开始的5个字符替换为s1而产生的串s2 * 输出串s2 * 提取串s中的第2个字符开始的10个字符而产生串s3 * 输出串s3 * 将串s1和串s2连接起来儿产生串s4 * 输出串s4 */ #include <stdio.h> #include <stdlib.h> #define Max 100 typedef struct String{ char data[Max]; int length; }SqString; void CreatStr(SqString *s, char temp_s1[]); void DispStr(SqString s); int StrLen(SqString s); SqString InserStr(SqString s, int i, SqString s1); int main(void) { SqString s, s1, s2, s3, s4; char temp_s1[]="abcdefghijklmn"; char temp_s2[]="pqrst"; CreatStr(&s, temp_s1); CreatStr(&s1, temp_s2); DispStr(s); printf("The length of the string of 's' is %d\n",StrLen(s)); s2=InserStr(s, 9, s1); DispStr(s1); DispStr(s2); return 0; } void CreatStr(SqString *s, char temp_s1[]){ int i; s->length=0; for(i=0; temp_s1[i]!='\0'; i++) s->data [i]=temp_s1[i]; s->length=i; } void DispStr(SqString s){ int i; if(s.length<=0) return; for(i=0; i<s.length;i++) printf("%c",s.data[i]); printf("\n"); } int StrLen(SqString s){ return s.length; } SqString InserStr(SqString s, int i, SqString s1){//在串s的第i个字符位置插入串s1而产生串s2 int j; SqString s2; s2.length=0; if(i<=0||i>s.length+1) return s2; for(j=0; j<i-1; j++) s2.data[j]=s.data[j]; for(j=0; j<s2.length; j++) s2.data[i+j-1]=s1.data[j]; for(j=i-1; j<s.length; j++) s2.data[j+s1.length]=s.data[j]; s2.length=s.length+s1.length; return s2; }
代码如下