3

変数に2 つのテーブルが格納されているstd::string場合、それらを並べて表示するにはどうすればよいでしょうか? 特に...

私はstd::string table1以下を含むものを持っています:

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

私はstd::string table2以下を含むものを持っています:

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

以下が表示されるように、それらを変更する (または実際には標準出力に出力する) 必要があります。

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

std::stringつまり、行を区切る改行文字を使用して変数に格納された 2 つのテーブルがあります。

std::coutテーブルが横に並んで表示され、上部に垂直に配置されるように、それらを画面に印刷したいと思います (を使用)。どうすればこれを行うことができますか?

たとえば、whereが次のトークンを与え、トークンが文字で区切られているようなことができれば、すべてのトークンを循環する方法を考案でき、すべてのトークンが使用されたら、単純にスペース文字を出力できます。の残りのトークンが適切に水平方向に配置されていること。しかし、そのような機能は存在しません --- 少なくとも私は知りません。std::cout << table1.nextToken('\n')nextToken('\n')'\n'table1table2nextToken(std::string)

4

1 に答える 1

5

キーワード: istringstream、getline

実装:

#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;
    }
}
于 2013-05-31T23:44:00.027 に答える