简体   繁体   English

如何正确打印带有边距的长字符串(setw())?

[英]How to properly print long string with a margin (setw())?

My string is hmm, 350 chars long. 我的字符串是嗯,长350个字符。 I need to center it in the console so it has same margins from the left and right side. 我需要将其在控制台中居中,以便它在左侧和右侧具有相同的边距。

When I try to setw() on this, I get an output like this (only the beginning is with a margin). 当我尝试对此进行setw()时,我得到这样的输出(仅开始处有一个空白)。

          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

What I'm trying to achieve: 我想要达到的目标:

             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
             aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

My code looks like this (only for the left side, I didn't even try for the second one yet): 我的代码看起来像这样(仅在左侧,我什至没有尝试第二个):

out << left << setw(20) << " " << longString << endl;

If someone knows how to achieve my goal, I'll be grateful! 如果有人知道如何实现我的目标,我将不胜感激!

If you know the linewidth it is rather simple: 如果您知道线宽,则非常简单:

#include <iostream>
#include <string>
#include <iomanip>

int main(){
    std::string longstring = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    int margin = 5;
    int linewidth = 10;
    int pos = 0;
    while (pos < longstring.size()){
        std::cout << std::setw(linewidth) 
                  << longstring.substr(pos,linewidth-margin) << std::endl;
        pos+= linewidth-margin;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM