|
算法4.2
void replace(String& S, String T, String V)
{
//
以串V替代串S中出现的所有和串T相同的子串
n=StrLength(S); m=StrLength(T); pos = 1;
StrAssign(news, NullStr); //
初始化 news 串为空串
i=1;
while ( pos <= n-m+1 && i )
{
i=Index(S, T, pos); //
从pos指示位置起查找串T
if (i!=0) {
SubString(sub, S, pos, i-pos); //
不置换子串
Concat(news, news, sub); //
联接S串中不被置换部分
Concat(news,news, V); //
联接V串
pos = i+m; //
pos 移至继续查询的起始位置
} // if
} // while
SubString(sub, S, pos, n-pos+1); //
剩余串
Concat( S, news, sub );
// 联接剩余子串并将新的串赋给S
} |
|
实现"置换"操作的基本思想为:由S和V生成一个新的串 news。首先将它初始化为一个空串,然后重复下列两步直至"查找不成功"为止:
1) 自 pos 位置起在串S中查找和T相同的子串;
2) 将S中不被置换的子串(即从 pos 起到和T相同子串在S中的位置之前的字符序列)和V相继联接到news 串上。
最后尚需将S中不被置换的字符序列联接到 news 串中,并将所得的新串赋给串 S。
这里要注意的是,语句 Concat(news,news,V)
的前提是不破坏V串。即在利用高级语言实现此算法时应注意看请语言使用手册中的说明。 |
|