c++中使用换行符分割字符串

Splitting strings by newline character in C++

本文关键字:分割 字符串 换行符 c++      更新时间:2023-10-16

如果我有两个表存储在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),这样表就会并排出现,垂直对齐在顶部。我怎么能这么做?

例如,如果我可以做类似std::cout << table1.nextToken('n')的事情,其中nextToken('n')给出下一个令牌,令牌由'n'字符分隔,然后我可以设计一种循环遍历所有令牌的方法,一旦使用了所有table1令牌,然后我可以简单地打印空格字符,以便table2的剩余令牌正确地水平对齐。但是,这样的nextToken(std::string)函数不存在-我不知道它,至少。

关键词:istringstream, getline

Implementaion:

#include <iostream>
#include <sstream>
int main()
{
    std::string table1 = 
        " X | Yn"
        "-------n"
        " 2 | 3n"
        " 1 | 3n"
        " 5 | 2n";
    std::string table2 = 
        " X | Yn"
        "-------n"
        " 1 | 6n"
        " 1 | 1n"
        " 2 | 1n"
        " 3 | 5n"
        " 2 | 3n";
    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;
    }
}