7
Status StrInsert ( HString &S, int pos, HString T )
{ // 在串 S 的第 pos 个字符之前(包括尾部)插入串 T
if (pos<1||pos>S.length+1) return ERROR; //pos 不合法则告警
if(T.length){ // 只要串 T 不空,就需要重新分配 S 空间,以便插
入 T
if (! ( S.ch=(char*)realloc(S.ch, (S.length+T.length)*sizeof(char))
)) exit(OVERFLOW); // 若开不了新空间,则退出
for ( i=S.length-1; i>=pos-1; --i ) S.ch[i+T.length] = S.ch[i];
// 为插入 T 而腾出 pos 之后的位置,即从 S 的 pos 位置起全部字符均
后移
S.ch[pos-1…pos+T.length-2] = T.ch[0…T.length-1]; // 插入 T ,略
/0
S.length + = T.length; // 刷新 S 串长度
} return OK;
} //StrInsert
例 2 :用“堆”方式编写串插入函数 ( 参见教材 P75)