有没有办法使setw和setfill pad结束一个字符串而不是前面?
我有一种情况,我正在打印这样的东西.
CONSTANT TEXT variablesizeName1 .....:number1 CONSTANT TEXT varsizeName2 ..........:number2
我想添加一个变量“’.到最后
“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"; }
我想这会做这个工作,但感觉很笨重.
想法?
解决方法
您可以使用操纵器
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