如何更换字符?

时间:2013-12-11 06:34:27

标签: c++ c

给定一个字符串"abc{efg}dgb",我想对大括号之间的字符进行替换。这就是我目前正在尝试的。但它需要memcpy 3次。可以改进吗?

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<string>
#include<iostream>
#include<string.h>
using namespace std;

void replace(char *newWord,char *a,char *b)
{
  char *p;
  char *q;
  int offset = 0;
  int pos = 0;
  int len_b = strlen(b);
  p= strchr(a,'{');
  offset = p -a;
  memcpy(newWord,a,offset);
  offset += pos;
  memcpy(newWord+offset,b,len_b);
  offset += len_b;
  q = strchr(a,'}');
  memcpy(newWord+offset,q+1,strlen(q+1));
}


int main()
{
  char *a = "abc{acd}efg";
  char *b = "new";
  char *q;
  char newWord[1024]="";

  replace(newWord,a,b);

  printf("%s",newWord);
}

现在newWord是“abcnewefg”

2 个答案:

答案 0 :(得分:2)

以下是让您踏上C ++的步骤

  1. 将您的字符串放在std::string
  2. 使用std::string::find查找“{”
  3. 再次使用std::string::find,找到在步骤2中找到的“{”之后的“}”
  4. 使用std::string::erase使用您从步骤2和步骤3获得的信息删除字符
  5. 一旦你完成了这个工作,你可以运行它来查看速度是否有效满足您的需求,然后您可以根据瓶颈进行优化。

答案 1 :(得分:0)

效率可以指编码的简易性,维护成本或执行速度。通常你想在3之间取得平衡。

因为你明确提到了字符串,所以我假设你引用的是C ++,而不是C。

在当前的C ++环境中,使用string :: replace或使用正则表达式(自己的主题)可以轻松地替换字符串中的“something”。

如果你想要一些难以维护但可能更快的东西,你可以迭代字符串并根据需要插入或删除字符。