文字列をインデックスに置き換えたい。x
との間の文字列y
。置き換えられる文字列の長さが より短いy
場合、ポインターはその差だけインクリメントする必要があります。例えば、
与えられた文字列([10 20]...[10 20]..[30 80])
; x = 1
(index of [
) およびy = 7
(index of ]
) であり、string-replace が50
である場合、 に置き換える必要があります(50...[10 20]..[30 80])
。
私はそれを試しました:
void replaceindex(char *s, char *replace, unsigned int start, unsigned int end)
{
assert(start < end);
char *p = s, *q = s, *r = replace;
register unsigned int i = 0;
int found = 0;
while(*q) {
if(found == 0 && i == start) {
found = 1;
for(; *r; ++r, ++start, ++q)
*p ++ = *r;
while(++start < end)
q++;
}
*p ++ = *q ++;
i ++;
}
}
使用:
char str[] = "([10 20]...[10 20]..[30 80])";
printf("Before: %s\n", str);
replaceindex(str, "50", 1, 7);
printf("After: %s\n", str);
出力は次のとおりです。
Before: ([10 20]...[10 20]..[30 80])
After: (500]...[10 20]..[30 80])0])
しかし、私はこれを期待しています:
Before: ([10 20]...[10 20]..[30 80])
After: (50...[10 20]..[30 80])
これを修正する方法は?