C 替换为索引
我想用索引替换字符串。介于C 替换为索引,c,replace,C,Replace,我想用索引替换字符串。介于x和y之间的字符串。如果要替换的字符串长度小于y,则指针必须按差值递增。e、 g, 给定字符串([1020]…[1020]…[3080])x=1(索引为[)和y=7(索引为]),字符串替换为50,必须替换为(50…[10 20]…[30 80]) 我试过了: void replaceindex(char *s, char *replace, unsigned int start, unsigned int end) { assert(start < end);
x
和y
之间的字符串。如果要替换的字符串长度小于y
,则指针必须按差值递增。e、 g,
给定字符串([1020]…[1020]…[3080])
x=1
(索引为[
)和y=7
(索引为]
),字符串替换为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 ++;
}
}
输出为:
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])
如何解决这个问题
#include <stdio.h>
#include <string.h>
char* replaceindex(char *s, char *replace, unsigned int start, unsigned int end)
{
char *rep= (char*)malloc(strlen(s)+1);
memset(rep,0,strlen(s)+1);
if(strlen(replace)<=(end-start))
{ memcpy(rep,s,start);
memcpy(rep+start,replace,strlen(replace));
memcpy(rep+start+strlen(replace),s+end,strlen(s+end));
return rep;
}
else{free(rep);}
return s;
}
int main() {
char* z="This answer is crazy";
printf("%s",replaceindex(z,"Code",5,11));
return 0;
}
编辑:
没有内存:-
#包括
#包括
void replaceindex(char*s、char*replace、unsigned int start、unsigned int end)
{
如果(strlen)(更换)
编辑:
没有内存:-
#包括
#包括
void replaceindex(char*s、char*replace、unsigned int start、unsigned int end)
{
如果(strlen(replace)您需要两个修复程序:
for(; *r; ++r, ++start, ++q)
*p ++ = *r;
- while(++start < end)
+ while(start++ <= end)
q++;
}
*p ++ = *q ++;
i ++;
}
+ *p = '\0';
}
(;*r;++r,++start,++q)的
*p++=*r;
-而(++开始<结束)
+而(start++您需要两个修复程序:
for(; *r; ++r, ++start, ++q)
*p ++ = *r;
- while(++start < end)
+ while(start++ <= end)
q++;
}
*p ++ = *q ++;
i ++;
}
+ *p = '\0';
}
(;*r;++r,++start,++q)的
*p++=*r;
-而(++开始<结束)
+虽然(开始+++构建,但避免创建新字符串:
void replaceindex(char *s, char *replace, unsigned int start, unsigned int end)
{
unsigned rl, sl;
rl = strlen(replace);
sl = strlen(s);
++end; /* change inclusive index to exclusive one */
assert(start <= end);
assert(rl <= end - start);
memcpy(s + start, replace, rl);
memmove(s + start + rl, s + end, sl - end + 1);
}
void replaceindex(char*s,char*replace,unsigned int start,unsigned int end)
{
无符号rl,sl;
rl=strlen(替换);
sl=strlen(s);
++结束;/*将包含索引更改为独占索引*/
assert(开始构建,但避免创建新字符串:
void replaceindex(char *s, char *replace, unsigned int start, unsigned int end)
{
unsigned rl, sl;
rl = strlen(replace);
sl = strlen(s);
++end; /* change inclusive index to exclusive one */
assert(start <= end);
assert(rl <= end - start);
memcpy(s + start, replace, rl);
memmove(s + start + rl, s + end, sl - end + 1);
}
void replaceindex(char*s,char*replace,unsigned int start,unsigned int end)
{
无符号rl,sl;
rl=strlen(替换);
sl=strlen(s);
++结束;/*将包含索引更改为独占索引*/
断言(开始)你不计算括号的层次,是吗?你不计算括号的层次,是吗?谢谢你的回答。但我想修改原始缓冲区,而不是制作另一个。谢谢你的回答。但我想修改原始缓冲区,而不是制作另一个。
void replaceindex(char *s, char *replace, unsigned int start, unsigned int end)
{
unsigned rl, sl;
rl = strlen(replace);
sl = strlen(s);
++end; /* change inclusive index to exclusive one */
assert(start <= end);
assert(rl <= end - start);
memcpy(s + start, replace, rl);
memmove(s + start + rl, s + end, sl - end + 1);
}