2013-05-31 2 views
3

std::string 변수에 두 개의 테이블이 저장된 경우 어떻게 나란히 표시 할 수 있습니까?C++에서 개행 문자로 문자열 분리

X | Y 
------- 
2 | 3 
1 | 3 
5 | 2 

나는 다음과 같은 포함하는 std::string table2 있습니다 :

X | Y 
------- 
1 | 6 
1 | 1 
2 | 1 
3 | 5 
2 | 3 

난 그냥 그들을 인쇄 정말 그들을 (수정하거나 필요 특히 ...

나는 다음과 같은 포함하는 std::string table1이 표준 출력으로) 다음과 같이 표시됩니다.

X | Y X | Y 
------- ------- 
2 | 3 1 | 6 
1 | 3 1 | 1 
5 | 2 2 | 1 
      3 | 5 
      2 | 3 

즉, std::string 개의 변수에 줄 바꿈 문자가있는 두 개의 테이블이 있습니다.

테이블을 나란히 배치하고 맨 위에 세로로 정렬되도록 (std::cout 사용) 화면에 인쇄하고 싶습니다. 내가 어떻게 할 수 있니? 예를 들어

, 내가 nextToken('\n') 다음 토큰을 제공하고 토큰이 '\n' 문자로 구분된다 std::cout << table1.nextToken('\n') 같은 것을, 나는 모든 토큰을 통해 순환하는 방법을 고안 할 수 할 수 경우 , 한 번 모든 table1 토큰 를 사용하면 나머지 공백 문자가 table2이 제대로 가로로 정렬되도록 공백 문자를 간단히 인쇄 할 수 있습니다. 그러나, 그런 nextToken(std::string) 기능은 존재하지 않습니다 --- 나는 적어도 그것을 모른다.

+1

참조 [이 QA (http://stackoverflow.com/q/236129/485561)와 [Boost.StringAlgo] (HTTP : //www.boost.org/doc/libs/release/doc/html/string_algo.html). – Mankarse

+0

대단히 감사합니다 :) – synaptik

답변

5

주요 단어 : istringstream,의 getline

Implementaion :

#include <iostream> 
#include <sstream> 
int main() 
{ 
    std::string table1 = 
     " X | Y\n" 
     "-------\n" 
     " 2 | 3\n" 
     " 1 | 3\n" 
     " 5 | 2\n"; 
    std::string table2 = 
     " X | Y\n" 
     "-------\n" 
     " 1 | 6\n" 
     " 1 | 1\n" 
     " 2 | 1\n" 
     " 3 | 5\n" 
     " 2 | 3\n"; 

    std::istringstream streamTable1(table1); 
    std::istringstream streamTable2(table2); 
    while (!streamTable1.eof() || !streamTable2.eof()) 
    { 
     std::string s1; 
     getline(streamTable1, s1); 
     while (s1.size() < 9) 
      s1 += " "; 
     std::string s2; 
     getline(streamTable2, s2); 
     std::cout << s1 << s2 << std::endl; 
    } 
} 
+1

s1에 공간을 추가하는 대신'std :: cout << std :: left << std :: setw (9) << s1 << s2 << std :: endl;' . 'iomanip' 헤더 파일이 필요합니다. – Bee

관련 문제