关于串的操作代码的疑惑? 在线求等高手解答,问题一二在代码注解后
int StrInsert(SeqString *S,int pos,SeqString T)/*串的插入操作。在S中第pos个位置插入T分为三种情况*/
{
int i;
if(pos<0||pos-1>S->length) /*插入位置不正确,返回0*/ //问题一:为什么这不是pos>S->length,而是还要减一?
{
printf("插入位置不正确");
return 0;
}
if(S->length+T.length<=MaxLength) /*第一种情况,插入子串后串长≤MaxLength,即子串T完整地插入到串S中*/
{
/*在插入子串T前,将S中pos后的字符向后移动len个位置*/
for(i=S->length+T.length-1;i>=pos+T.length-1;i--)
S->str[i]=S->str[i-T.length];
/*将串插入到S中*/
for(i=0;i<T.length;i++)
S->str[pos+i-1]=T.str[i];
S->length=S->length+T.length;
return 1;
}
/*第二种情况,子串可以完全插入到S中,但是S中的字符将会被截掉*/
else if(pos+T.length<=MaxLength)
{
for(i=MaxLength-1;i>T.length+pos-1;i--) /*将S中pos以后的字符整体移动到数组的最后*/ 问题2://如何确定是i>T.length+pos-1;,和S->str[i]=S->str[i-T.length]?.
S->str[i]=S->str[i-T.length];
for(i=0;i<T.length;i++) /*将T插入到S中*/
S->str[i+pos-1]=T.str[i];
S->length=MaxLength;
return 0;
}
/*第三种情况,子串T不能被完全插入到S中,T中将会有字符被舍弃*/
else
{
for(i=0;i<MaxLength-pos;i++) /*将T直接插入到S中,插入之前不需要移动S中的字符*/
S->str[i+pos-1]=T.str[i];
S->length=MaxLength;
return 0;
}
}