环境:Win7 x64,VS2015
内容:如下图所示,第一行输入参数,第二行输入int值,然后将其对齐,输出出来
要求:数据之间必须有间隔,不能数据重叠!
代码:
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
std::string IntToStr(int value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
bool GetAlignedText(std::vector<std::pair<std::string, int>> &inputParamData, std::string startLable, std::string paramGap, int oneRowMaxSize,std::vector<std::string> &alignedText)
{
alignedText.clear();
std::string paramStr = startLable + paramGap;
std::string dataStr = "";
for (int i = 0; i < inputParamData.size(); ++i)
{
paramStr += (inputParamData[i].first + paramGap);
int oneParamMiddlePos = paramStr.size() - (inputParamData[i].first.size() - 1) / 2 - paramGap.size();
std::string oneData = IntToStr(inputParamData[i].second);
int dataStartPos = oneParamMiddlePos - (oneData.size() - 1) / 2;
std::string tmpDataGap = "";
for (int j = dataStr.size(); j < dataStartPos - 1; ++j)
{
tmpDataGap += " ";
}
if (tmpDataGap.empty())
{
dataStr+= (" " + oneData);
}
else
{
dataStr += (tmpDataGap+oneData);
}
}
if (paramStr.size() > 0 && paramStr.size() < oneRowMaxSize && dataStr.size() > 0 && dataStr.size() < oneRowMaxSize)
{
alignedText.push_back(paramStr);
alignedText.push_back(dataStr);
return true;
}
return false;
}
int main()
{
std::vector<std::pair<std::string, int>> paramData;
paramData.push_back(std::pair<std::string, int>("一二三四五六七", -1234));
paramData.push_back(std::pair<std::string, int>("2", -123456));
std::vector<std::string> alignedText;
bool isOK = GetAlignedText(paramData, "", " ",72, alignedText);
for (int i = 0; i < alignedText.size(); ++i)
{
cout << alignedText[i] << endl;
}
system("pause");
return 0;
}
注意:VS2015 调试时发现并没有对齐,如下图。
其他如NX显示对话框输出也是没有对齐的,但输出到txt文本仍然是对齐的。