2013-12-11 3 views
-4

문자열이 "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"여기

+1

정확한 호출이 느린 것으로 생각하기 전에 프로그램을 벤치 마크하십시오. 또한 C와 C++은 다른 언어입니다. 하나를 선택하십시오! (C++을 선택했다면, 가능한 경우 [C++ 11] (http://en.wikipedia.org/wiki/C%2B%2B11)을 사용하십시오). –

+0

C 및 C++ 용 솔루션은 다를 수 있습니다. 하나 골라. –

+0

나는 qustion을 변경했습니다. 다시 게시 할 수 있습니까? – liumilan

답변

2

는 C에서 오른발 ++

  1. 장소에 당신을 얻을하는 단계입니다입니다 { "std::string::find 찾기를 사용하여 std::string
  2. 에 문자열 "
  3. std::string::find을 다시 사용하여 2 단계에서 발견 한"{ "다음에 오는"} "을 찾으십시오.
  4. 사용 std::string::erase 당신이 속도는 당신이 필요로 효율적이면 가고, 당신이보고를 실행할 수 있습니다되면 2 단계에서 얻은 정보와 3 단계

를 사용하여 문자를 제거하려면 다음을 수행 할 수 있습니다 병목이 무엇인지에 따라 최적화하십시오.

0

효율성은 코딩 용이성, 유지 관리 비용 또는 실행 속도를 나타냅니다. 일반적으로 당신은 쉽게 문자열에 "뭔가"를 대체 할 수 있습니다 명시 적으로 문자열을 언급하기 때문에, 나는 ++은 C를 참조 가정합니다 3.

사이의 균형을 공격 할 아닌 현재 C++ 환경에서 C.

string :: replace 나 정규 표현식 (주제 자체)으로 처리 할 수 ​​있습니다.

유지 관리하기가 더 어렵지 만 잠재적으로 더 빠른 것을 원할 경우, 문자열을 반복하고 필요에 따라 문자를 삽입하거나 삭제할 수 있습니다.

관련 문제