C++ 右对齐C+中的两个变量+;(我想将它们视为一个变量)

C++ 右对齐C+中的两个变量+;(我想将它们视为一个变量),c++,iomanip,setw,C++,Iomanip,Setw,假设我有一个char变量和一个整数变量。当我输出它们时,我想把它们当作一个变量(例如:B6、A2、C10等) 我想在一个4空间的插槽中正确地证明这两个变量,但我一辈子都想不出怎么做。(我想要A10和A6,下划线是空格) < C++ >?/p>< p>使用Boosi.Frand可以将PrtTF样式格式应用到C++流。 #include <iostream> #include <string> #include <boost/format.hpp> int ma

假设我有一个char变量和一个整数变量。当我输出它们时,我想把它们当作一个变量(例如:B6、A2、C10等)

我想在一个4空间的插槽中正确地证明这两个变量,但我一辈子都想不出怎么做。(我想要A10和A6,下划线是空格)


< C++ >?/p>< p>使用Boosi.Frand可以将PrtTF样式格式应用到C++流。

#include <iostream>
#include <string>
#include <boost/format.hpp>

int main()
{
  char c = 'A';
  int i = 10;
  std::cout << boost::format("|%4s|") % (c + std::to_string(i)) << '\n';
}

这里有一个没有Boost依赖性的解决方案。将整数转换为字符串,与字符连接,并使用
std::setw
设置流宽度。例如:

#include <iostream>
#include <iomanip>
int main(void)
{
    char a = 'A', b = 'B';
    int ai = 10, bi = 6;
    std::cout << std::setw(4) << (a + std::to_string(ai)) << std::endl;
    std::cout << std::setw(4) << (b + std::to_string(bi)) << std::endl;
}

我的解决方案是在输出变量和空格之前,生成一个if语句并检查整型变量是否>=10,但这会使代码很难读取。我想知道是否有iomanip解决方案当你意识到计算机必须做什么时,这些类型的问题会变得更容易回答。因为它是从左向右打印的,所以打印
\uuuuA6
意味着它需要在A前面打印两个空格,然后再打印6。关键词是before。在开始打印空格字符之前,您必须知道要打印的最后一个变量。MSalters,如果您查看我的评论,我已经提到了这一点,并讨论了我自己的解决方法(如果整数变量可以是3位或4位,等等,这将更加繁琐)。但是,我已经从其他评论中获得了iomanip解决方案,尽管我仍然不确定您的评论的目的。不需要Boost,只要列名和行名如图所示先连接起来,就可以使用
std::right
std::setw
完成对正,如感谢二者中所示。本,你说得对,亨利的解决方案我不需要boost,但我很高兴我被介绍给它,以备将来需要。谢谢bnaecker-非常有创意的解决方案。我必须包括在内,但效果非常好。
#include <iostream>
#include <iomanip>
int main(void)
{
    char a = 'A', b = 'B';
    int ai = 10, bi = 6;
    std::cout << std::setw(4) << (a + std::to_string(ai)) << std::endl;
    std::cout << std::setw(4) << (b + std::to_string(bi)) << std::endl;
}
 A10
  B6