如何打印包含数字右对齐的字符串?

时间:2018-12-04 11:34:25

标签: c++

我正在寻找将数字打印到一个右对齐列中的文件的方法。

我的输入是字符串。

示例:

string s = {1,2.5,2.55,3,1000,100,15000,20,1,0,3.8};

希望输出:

    1
  2.5
 2.55
    3
 1000
  100
15000
   20
    1
    0
  3.8

4 个答案:

答案 0 :(得分:4)

std::rightstd::setwstd::numeric_limits<T>::max_digits10是您需要的工具:

  • out << std::rightout流设置为右对齐。
  • out << std::setw(x)out的宽度设置为x个字符。
  • std::numeric_limits<T>::max_digits10返回以10为基数表示类型T的值所需的最大位数。

示例

#include <iostream>
#include <iomanip>
#include <array>

int main()
{
    const std::array<double, 5> data = { 1, 2.5, 2.55, 3, 1000 };
    for (auto x : data) {
        std::cout << std::right << std::setw(std::numeric_limits<decltype(x)>::max_digits10) << x << '\n';
    }
}

输出

            1
          2.5
         2.55
            3
         1000

Live demo

通过fstream打印到文件中的操作与此类似。

答案 1 :(得分:1)

我会将您的数字存储为双精度,而不是以字符串开头。使用sttod将字符串转换为双精度。

看看使用cplusplus.com site的std :: sort库。 要打印它们,我建议将printf用于基本输出,或者将fprintf写入文件。

double ds[] = {1,2.5,2.55,3,1000,100,15000,20,1,0,3.8};
int cds = _countof (ds);
std::vector<int> vds (ds, cds);
std::sort (vds.begin (), vds.end ());
for (int i = 1; i < cds; ++i)
  printf ("%09f\n", vds [i]);

答案 2 :(得分:0)

找到最长的字符串:

        ofstream myfile;
        std::istringstream f("line1\nline2\nline3");
        std::string line;   
        std::string longest = "";
        while (std::getline(f, line)) {
                std::cout << line << std::endl;
                if(line.length() > longest.length()){
                longest = line;
                }
        }

myfile << << std::right << setw(longest.length()) << "Your Text";

这是我的解决方法

答案 3 :(得分:-1)

尝试这样:

vector<string> s = { "1", "2.5", "2.55", "3", "1000", "100", "15000", "20", "1", "0", "3.8" };
vector<double> d;
auto conv = [](const string &s)
{
    stringstream ss(s);
    double d;
    ss >> d;
    return d;
};

std::transform(s.begin(), s.end(), std::back_inserter(d), conv);
std::sort(d.begin(), d.end());
std::ofstream file("1.txt", std::ios::out);
std::transform(d.begin(), d.end(), s.begin(), [](double val){return to_string(val);});
for(auto &str : s)
{
    auto str1 = str + "\n";
    file.write(str1.data(), str1.size());
}