如果我在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
变量中,换行符分隔行。
我想将它们打印到屏幕上(使用std::cout
),以便表格并排显示,垂直对齐在顶部。我怎么能这样做?
例如, if 我可以执行类似std::cout << table1.nextToken('\n')
的操作,其中nextToken('\n')
提供下一个令牌,令牌由'\n'
字符分隔,然后我可以设计一个循环遍历所有标记的方法,一旦使用了所有table1
标记,我就可以简单地打印空格字符,以便table2
的其余标记正确水平对齐。但是,这样的nextToken(std::string)
函数不存在 - 至少我不知道它。
答案 0 :(得分:5)
关键字:stringstream,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;
}
}