gpt4 book ai didi

c++ - 使用 stringstream 缩进/居中输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:13 25 4
gpt4 key购买 nike

我正在学习 C++ 并获得了将帕斯卡三角形发送到输出的项目(经过 n 行计算后)。获得这样的输出,存储在字符串流“缓冲区”中

 1
1 1
1 2 1
1 3 3 1

但我更想要的是

    1
1 1
1 2 1
1 3 3 1

我的想法是:计算最后一行和当前行长度的差值(我知道最后一行最长)。然后使用空格填充每一行(行长差的一半)。我现在的问题是:

  • 我不明白 getLine 是如何工作的,也不知道我如何提取特定的(-> 最后一行)
  • 我不知道也找不到如何编辑字符串流中的特定行

不知何故,我觉得我不是在使用 stringstream 的最佳方式。

所以这是一个相当常见的问题:你是如何解决这个问题的,如果可能的话,使用 stringstreams - 如何解决?

最佳答案

要知道第一行的缩进,您需要知道输入中的行数。因此,您必须首先读入所有输入。为了方便 .size() 成员函数,我选择使用 vector 来存储值,该函数将在读取所有输入后给出总行数。

#include<iostream>
#include<sstream>
#include<vector>
#include<iomanip> // For setw
using namespace std;
int main()
{
stringstream ss;
vector<string> lines;
string s;

//Read all of the lines into a vector
while(getline(cin,s))
lines.push_back(s);

// setw() - sets the width of the line being output
// right - specifies that the output should be right justified
for(int i=0,sz=lines.size();i<sz;++i)
ss << setw((sz - i) + lines[i].length()) << right << lines[i] << endl;

cout << ss.str();
return 0;
}

在本例中,我使用 setw 将线的宽度设置为右对齐。字符串左侧的填充由 (sz - i) 给出,其中 sz 是总行数,i 是当前行。因此,随后的每一行在左侧都少了 1 个空间。

接下来我需要添加该行的原始大小 (lines[i].length()),否​​则该行将不会包含足够大的空间以使结果字符串在左侧具有正确的填充.

setw((sz - i) + lines[i].length())

希望这对您有所帮助!

关于c++ - 使用 stringstream 缩进/居中输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com