给定一个字符串"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”
答案 0 :(得分:2)
以下是让您踏上C ++的步骤
std::string
一旦你完成了这个工作,你可以运行它来查看速度是否有效满足您的需求,然后您可以根据瓶颈进行优化。
答案 1 :(得分:0)
效率可以指编码的简易性,维护成本或执行速度。通常你想在3之间取得平衡。
因为你明确提到了字符串,所以我假设你引用的是C ++,而不是C。
在当前的C ++环境中,使用string :: replace或使用正则表达式(自己的主题)可以轻松地替换字符串中的“something”。
如果你想要一些难以维护但可能更快的东西,你可以迭代字符串并根据需要插入或删除字符。