gpt4 book ai didi

c++ - std::setw 如何处理字符串输出?

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:39 30 4
gpt4 key购买 nike

我正在尝试使用设置宽度 setw 将字符串输出到输出文件,但是,我无法使其工作。我有以下示例。

// setw example
#include <iostream>
#include <iomanip>
#include <fstream>

int main () {
std::ofstream output_file;
output_file.open("file.txt");
output_file << "first" <<std::setw(5)<< "second"<< std::endl;
output_file.close();
return 0;
}

编辑: 对于上面的行,我希望在 firstsecond 之间有很多空格,比如第一秒

我几乎看不到任何空格,输出就像 firstsecond我想我错过了 setw()

的工作

注意:对于整数,它工作正常只是:

output_file << 1 <<std::setw(5)<< 2 << std::endl;

我做错了什么??

最佳答案

我怀疑您对 std::setw 的理解根本不正确。我认为您需要更多类似以下内容的组合:

您的代码中发生了什么:

  • 使用 std::setw(5) 建立五个字符的字段宽度。
  • 发送 "first" 到流,它有五个字符长,因此已建立的字段宽度被完全消耗掉。没有额外的填充发生。
  • “second” 发送到流,它有六个字符长,所以再次消耗了整个字段宽度(实际上被破坏了)。同样,没有填充发生

如果您打算拥有这样的东西(上面的列号显示位置):

 col: 0123456789012345678901234567890123456789
first second third fourth

注意每个单词是如何从 10 的偶数倍边界开始的。一种方法是使用:

  • 输出位置std::left(所以填充,如果有的话在右边达到所需的宽度)。这是字符串的默认设置,但确定无妨。
  • std::setfill(' ') 的填充字符。同样,默认值。
  • 字段宽度 std::setw(10) 为什么这么大?见下文

示例

#include <iostream>
#include <iomanip>

int main ()
{
std::cout << std::left << std::setfill(' ')
<< std::setw(10) << "first"
<< std::setw(10) << "second"
<< std::setw(10) << "third"
<< std::setw(10) << "fourth" << '\n';
return 0;
}

输出(添加的列号)

0123456789012345678901234567890123456789
first second third fourth

那么如果我们将输出位置更改为 std::right 会发生什么?那么,使用相同的程序,仅将第一行更改为:

std::cout << std::right << std::setfill(' ')

我们得到

0123456789012345678901234567890123456789
first second third fourth

最后,一种查看填充字符应用位置的建设性方法是将填充字符简单地更改为可见的东西(即,除了空格之外的东西)。最后两个示例输出,将填充字符更改为 std::setfill('*') 产生以下输出:

首先

first*****second****third*****fourth****

第二

*****first****second*****third****fourth    

请注意,在这两种情况下,由于没有任何单个输出项违反 std::setw 值,因此每个输出行的总计 大小相同。所有改变的是应用填充的位置以及输出在 std::setw 规范内对齐。

关于c++ - std::setw 如何处理字符串输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242202/

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