有没有办法让setw
和setfill
填充字符串的结尾而不是前面?
我遇到的情况是打印这样的东西。
CONSTANT TEXT variablesizeName1 .....:number1
CONSTANT TEXT varsizeName2 ..........:number2
我想在{/ p>的末尾添加可变数量的'.'
"CONSTANT TEXT variablesizeName#"
所以我可以在屏幕上排列":number#"
。
注意:我有一个"variablesizeName#"
数组,所以我知道最广泛的情况。
或者
我应该通过设置setw
这样
for( int x= 0; x < ARRAYSIZE; x++)
{
string temp = string("CONSTANT TEXT ")+variabletext[x];
cout << temp;
cout << setw(MAXWIDTH - temp.length) << setfill('.') <<":";
cout << Number<<"\n";
}
我想这可以胜任,但感觉有点笨拙。
想法?
答案 0 :(得分:26)
您可以使用操纵器std::left
, std::right
, and std::internal
来选择填充字符的位置。
对于您的具体情况,可以这样做:
#include <iostream>
#include <iomanip>
#include <string>
const char* C_TEXT = "Constant text ";
const size_t MAXWIDTH = 10;
void print(const std::string& var_text, int num)
{
std::cout << C_TEXT
// align output to left, fill goes to right
<< std::left << std::setw(MAXWIDTH) << std::setfill('.')
<< var_text << ": " << num << '\n';
}
int main()
{
print("1234567890", 42);
print("12345", 101);
}
输出:
Constant text 1234567890: 42
Constant text 12345.....: 101
修改强>:
如链接中所述,std::internal
仅适用于整数,浮点和货币输出。例如,对于负整数,它会在负号和最左边的数字之间插入填充字符。
此:
int32_t i = -1;
std::cout << std::internal
<< std::setfill('0')
<< std::setw(11) // max 10 digits + negative sign
<< i << '\n';
i = -123;
std::cout << std::internal
<< std::setfill('0')
<< std::setw(11)
<< i;
将输出
-0000000001
-0000000123
答案 1 :(得分:1)
类似的东西:
cout << left << setw(MAXWIDTH) << setfill('.') << temp << ':' << Number << endl;
产生类似的东西:
derp..........................:234
herpderpborp..................:12345678
答案 2 :(得分:0)
#include <iostream>
#include <iomanip>
int main()
{
std::cout
<< std::setiosflags(std::ios::left) // left align this section
<< std::setw(30) // within a max of 30 characters
<< std::setfill('.') // fill with .
<< "Hello World!"
<< "\n";
}
//Output:
Hello World!..................