2012-09-20 7 views
3

여기에 내가해야 할 일이 있습니다. 나는 C++로 문자열을 가지고있다. 문자열의 모든 줄에 대해 줄 시작 부분에 몇 개의 문자 (예 : ">>")를 추가해야합니다. 내가 고민하고있는 것은 문자열을 개행 문자 주위로 분할하고 문자를 추가하는 요소를 반복하며 문자열을 다시 결합하는 좋은 방법이다. strtok()과 같은 몇 가지 아이디어를 보았습니다.하지만 C++ 문자열이 좀 더 우아 할 것으로 기대했습니다.문자열의 행을 반복합니다. C++

+3

희망이 있습니다. http://stackoverflow.com/questions/236129/splitting-a-string-in-c 도움이 될 수 있습니다. – halfelf

답변

9

를 사용해보십시오. 아마도 가장 효율적인 것은 아니지만, 이것이 핫 코드이거나 문자열이 거대한 경우가 아니면 괜찮습니다. 우리는 당신의 입력 문자열이 input라고한다고 가정 :

#include <string> 
#include <sstream> 

std::string result; 

std::istringstream iss(input); 

for (std::string line; std::getline(iss, line);) 
{ 
    result += ">> " + line + "\n"; 
} 

// now use "result" 
2

당신의 문자열의 데이터 파일과 같은 기본적 인 경우, 여기에 솔직 솔루션의 std::stringstream.

std::istringstream lines(string_of_lines); 
std::ostringstream indented_lines; 
std::string one_line; 
while (getline(lines, one_line)) { 
    indented_lines << ">> " << one_line << '\n'; 
} 
std::cout << indented_lines.str(); 
1

당신은 stringstream에 포장 한 번에 선을 추출하는 std::getline를 사용할 수 있습니다

std::string transmogrify(std::string const & in) { 
    std::istringstream ss(in); 
    std::string line, out; 
    while (getline(ss, line)) { 
     out += ">> "; 
     out += line; 
     out += '\n'; 
    } 
    return out; 
} 
1

더 기능적 접근은 사용하는 것 이와 같이, this answer에 나타낸 모든 입력 선을 변환하는 std::transform와 그 사용과 같은 getline 기반 반복자

std::string transmogrify(const std::string &s) { 
    struct Local { 
     static std::string indentLine(const std::string &s) { 
      return ">> " + s; 
     } 
    }; 

    std::istringstream input(s); 
    std::ostringstream output; 
    std::transform(std::istream_iterator<line>(input), 
        std::istream_iterator<line>(), 
        std::ostream_iterator<std::string>(output, "\n"), 
        Local::indentLine); 
    return output.str(); 
} 
,745,

indentLine 도우미가 실제로 줄을 들여 쓰고, 줄 바꿈은 ostream_iterator에 의해 삽입됩니다.

+0

@Potatoswatter : 맞아요. 문구를 수정했습니다. –