改变运算符的顺序以解决这个问题:
#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::left
或std::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) {
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;
}
这个例子的作用是在开始时让每一行填充给定页面。它通过将文本分成单词,用这些单词填充行,并使每一行对齐以完全匹配宽度来实现。
using namespace std
? - programstinator