2012-02-13 4 views
0

여기 분할 된 문자열이 있습니다. 각 줄은 벡터의 다른 셀에 있고 처음 세 글자가 .N/ 인 경우 모든 줄을 검색하려고합니다. 난 단지 로 시작하는 줄 중 하나를 검색 할 수있는 것 같습니다. N/ 아래 작업 할 문자열입니다. 내가 STR을 인쇄 할 때 내가여러 줄로 된 문자열 얻기

std::vector<std::string> el; //VECTOR 
    split(el,message,boost::is_any_of("\n"));// the string above is split line for line into vector el 

for(int i = 0; i < el.size(); i++) 
    { 
     if(el[i].substr(0,3) == ".N/") 
     { 

      str = el[i].substr(3); 

     } 
    } 
    cout << str; 

그러나 순간에서 사용하기

std::string message = ".N/1TLIS/PART/123456789I/A/1234RFGH67323\n" 
    ".N/AT0931/2DEC/GVA/Y\n" 
    ".I/KL0967/02APR/AMS/F\n" 
    ".O/123/MARRIOTT/27MAY/084512L//FEDEXVAN45\n"; 

CODE 내가에만 얻을 "1TLIS/부/123456789I/A/1234RFGH67323" 하지 1TLIS/PART/123456789I/A/1234RFGH67323 및 "AT0931/2DEC/GVA/Y"

특정 문자를 시작하는 모든 행을 검색 할 수있는 방법이 있습니까?

+0

'엘'을 초기화하는 방법을 보여주세요. – nabulke

+0

'el'과 관련된 코드를 게시 할 수 있습니까? – shengy

+0

@nabulke 코드가 질문에서 편집되었습니다. – CodersSC

답변

0

당신은, 현재 방금 교체 str에에 추가 할 필요가 시도 : 먼저 알고리즘을 사용하여 for 루프 내에서 다음 for 루프 전에

str.append(el[i].substr(3)); 
0
for(int i = 0; i < el.size(); i++) 
{ 
    if(el[i].substr(0,3) == ".N/") 
    { 

     str = el[i].substr(3); 
     cout << str << endl; 
    } 
} 

str는 당신이 ".N/" 발견 된 모든 시간에 덮어 쓰기, 당신은 단지 마지막 하나를 출력 됨된다.

2

또 다른 대안 솔루션을 ""와 STR를 초기화 :

#include <algorithm> 
#include <boost/algorithm/string.hpp> 
#include <boost/bind.hpp> 

using namespace std; 

ostream_iterator<string> out_it(cout, "\n"); 

remove_copy_if(el.begin(), el.end(), out_it, 
    !boost::bind(boost::algorithm::starts_with<string, string>, _1, ".N/")); 
관련 문제