2012-03-12 2 views
0

벡터 문자열의 문자열을 대체하려고합니다. 내 말은, 나는 벡터 문자열을 가지고 있는데, 다음과 같은 정보로 벡터 tmpback을 정의한다 : name_lastname_phonenumber문자열을 벡터 문자열로 바꾸기

성을 대체하고 싶다. 예를 들어 누군가 john_smith_5551234 인 경우 smith를 smith100으로 바꿉니다.

vector<string> tmpback = names; 
for (Int_t i = 0; i < tmpback.size(); i++) { 
    replace(tmpback[i].begin(),tmpback[i].end(),"smith", "smith"+number); 
} 

(나는 이전 Int_t 참조 번호 = 0으로 정의하고 이후의 일부 값을 부여)

내 코드, 그것의 출력 부이다. 누군가 내가 뭘 잘못했는지 알았습니까?

감사

+1

'대체 (..., tmpback [I] .END(), ...);' – perreal

+0

죄송합니다, 오타 오류 – Alejandro

+0

그것은 표준 : : 문자열, number' '의 정의를 보여주십시오 ? –

답변

0

내 즉각적인 반응은 이유를 궁금해하는 것을 당신은이 상황에 자신을두고 있습니다. 문자열에 세 개의 개별 항목을 끼워 넣는 대신 문자열의 조각을 조작하는 대신 구조체를 만들어 각 조각을 개별적으로 작업 할 수 있습니까?

struct person { 
    std::string first_name; 
    std::string last_name; 
    int record_no; 
    std::string phone_number; 
}; 

이 방법은, 레코드 번호를 시침 (또는 무엇 이건 정확히 '100'대표) 마지막 이름 끝에 위에 것은, 당신은 단지 그것을 자신의 필드를주고, 적절한 수의 쓰기 대신 필요에 따라 :

vector<person> tmpback; 

for (int i=0; i<tmpback.size(); i++) 
    tmpback[i].record_no = number; 
+0

@ Jerry에게 감사드립니다. 실제로 나는 누군가의 코드 만 수정하고 있습니다. 그러나 그렇습니다. 더 합리적으로 들립니다. 나는 그것을 시도 할 것이다. – Alejandro

1

std::replace는 다른 시퀀스와 시퀀스를 대체하지 않습니다. 단일 요소를 다른 단일 요소로 대체합니다. 그 외에도 문자열에 숫자를 추가하는 방법은 작동하지 않습니다.

숫자를 문자열로 변환하려면 boost::lexical_cast 또는 std::to_string (C++ 11 만 해당)과 함께 boost::replace_first 또는 boost::replace_all을 시도하십시오.

using namespace boost; 
std::string replace_str = std::string("smith") + lexical_cast<std::string>(number); 
replace_first(tmpback[i], "smith", replace_str); 
또한 하위 문자열을 검색하고 당신이 그것을 발견하면, 그 후 (문자열로 변환) 수를 삽입 할 수

:

std::string::size_type pos = tmpback[i].find("smith"); 
if (pos != std::string::npos) 
{ 
    // adding 5 because that's the length of "smith" 
    tmpback[i].insert(pos + 5, std::to_string(number)); 
} 
+0

도와 주셔서 감사합니다. @Benjamin,이 오류가 있습니다.'Error : Symbol lexical_cast가 현재 범위 이름에 정의되어 있지 않습니다 .C : 400 : Error : 기호 문자열이 현재 범위에 정의되어 있지 않습니다'. 라인 400은 두 번째 라인입니다. – Alejandro

+0

@Alejandro :'lexical_cast'는 내가 제공 한 링크가 제안한대로 boost에서 왔습니다. 이 방법을 사용하려면 먼저 boost를 설치해야하며' '를 포함시켜야합니다. 참을성이 없다면 숫자를 표준 라이브러리에서 사용할 수있는 문자열로 변환하는 데 사용할 수있는 다른 방법이 있습니다. 먼저'std :: to_string'을 시도해보십시오.하지만 제가 말한 것처럼, 이것은 C++ 11 모드에서만 가능합니다. 그것이 작동하지 않는다면, 문자열 스트림에 의존해야 할 것이고, 이것은 약간 번거롭다. –

관련 문제