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);
}