gpt4 book ai didi

c++ - c++ 右对齐输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:05 25 4
gpt4 key购买 nike

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
cout << right << "Hello" << setw(10) << "World\n";
cout << right << "Goodbye" << setw(10) << "World\n";
}

为什么这会导致输出如下:

Hello    World
Goodbye World

而不是:

Hello    World
Goodbye World

我在这里做错了什么?

编辑:

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
cout << "Hello" << " World";
cout << right << setw(10) << "today\n";
cout << "Goodbye" << " World";
cout << right << setw(10) << "today\n";
}

如果我尝试这样做,为什么“今天”部分未对齐?

最佳答案

改变运算符的顺序来解决这个问题:

#include <iostream>
#include <iomanip>

int main()
{
std::cout << std::left << std::setw(10) << "Hello" << "World\n";
std::cout << std::left << std::setw(10) << "Goodbye" << "World\n";
return 0;
}
  • 您必须将所有运算符放在您要格式化的值之前
  • 避免使用using namespace std

std::setw() 运算符将字段设置为下一个值。 std::leftstd::right 运算符设置该字段中值的位置。

这个例子

std::cout << std::left << std::setw(10) << "word1"
<< std::right << std::setw(20) << "word2" << std::endl;

将创建这种格式:

AAAAAAAAAABBBBBBBBBBBBBBBBBBBB
word1 word2

您会看到第一个“字段”包含 10 个字符,其中放置第一个文本,第二个“字段”包含 20 个字符,其中第二个单词右对齐放置。但是如果第一个字段中的文本比该字段长,就会出现这种情况:

AAAAAAAAAA....BBBBBBBBBBBBBBBBBBBB
word1istoolong word2

第二个字段只是移动了字符数。流从不跟踪当前位置,它只是使用给定大小的“字段”构建输出。

要对齐给定页面的文本,请使用如下代码:

#include <iostream>
#include <sstream>
#include <list>

const int pageWidth = 78;
typedef std::list<std::string> WordList;

WordList splitTextIntoWords( const std::string &text )
{
WordList words;
std::istringstream in(text);
std::string word;
while (in) {
in >> word;
words.push_back(word);
}
return words;
}

void justifyLine( std::string line )
{
size_t pos = line.find_first_of(' ');
if (pos != std::string::npos) {
while (line.size() < pageWidth) {
pos = line.find_first_not_of(' ', pos);
line.insert(pos, " ");
pos = line.find_first_of(' ', pos+1);
if (pos == std::string::npos) {
pos = line.find_first_of(' ');
}
}
}
std::cout << line << std::endl;
}

void justifyText( const std::string &text )
{
WordList words = splitTextIntoWords(text);

std::string line;
for (WordList::const_iterator it = words.begin(); it != words.end(); ++it) {
if (line.size() + it->size() + 1 > pageWidth) { // next word doesn't fit into the line.
justifyLine(line);
line.clear();
line = *it;
} else {
if (!line.empty()) {
line.append(" ");
}
line.append(*it);
}
}
std::cout << line << std::endl;
}

int main()
{
justifyText("This small code sample will format a paragraph which "
"is passed to the justify text function to fill the "
"selected page with and insert breaks where necessary. "
"It is working like the justify formatting in text "
"processors.");
return 0;
}

此示例在开头对齐每一行以填充给定页面。它的工作原理是将文本拆分为单词,用这些单词填充行,并调整每行以完全匹配宽度。

关于c++ - c++ 右对齐输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981618/

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