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

C++ 如何打印包含右对齐数字的字符串?,c++,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 查找最长字符串: ofstream myfile; std::istringstream f("line1\nline2\nline3

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

我的输入是字符串

例如:

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
查找最长字符串:

        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";
流myfile的
;
std::istringstream f(“第1行\nline2\nline3行”);
std::字符串行;
std::string longest=“”;
while(std::getline(f,line)){
std::cout,以及您需要的工具:

  • out像这样尝试:

    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());
    }
    
    向量s={“1”、“2.5”、“2.55”、“3”、“1000”、“100”、“15000”、“20”、“1”、“0”、“3.8”}; 载体d; 自动转换=[](常量字符串&s) { 溪流ss(s);; 双d; ss>>d; 返回d; }; std::transform(s.begin()、s.end()、std::back_插入器(d)、conv); std::sort(d.begin(),d.end()); 流文件的std::of(“1.txt”,std::ios::out); std::transform(d.begin(),d.end(),s.begin(),[](双val){return to_string(val);}); 用于(自动&str:s) { 自动str1=str+“\n”; file.write(str1.data(),str1.size()); }
    我会将您的数字存储为双精度,而不是以字符串开头。使用sttod将字符串转换为双精度

    看看哪个使用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]);
    
    double-ds[]={1,2.5,2.55,3100015000,20,1,0,3.8};
    int cds=_countof(ds);
    std::向量vds(ds,cds);
    std::sort(vds.begin(),vds.end());
    对于(int i=1;i
    首先,你对排序了解多少,例如使用?其次,你对排序了解多少,以及如何使用排序来“操纵”输出格式?谷歌“C++排序”可以找到一个好的解决方案。试试看,我的意思是写代码。如果你的代码遇到问题,那么这也是一个寻求帮助的好地方(只需阅读有关如何提问等的帮助部分)。此外,虽然您显示的一行代码可能会编译时出现一些警告,但很可能不是您想要的。不清楚您实际要求的是什么。因此,请稍候,这些数字需要排序还是正好对齐?因此,找到最长字符串的长度,并在所有其他字符串中填充适当数量的空格。但在我们实际操作之前如果需要帮助,您需要向我们展示如何存储数字。可能是您已经编写的一些代码。
    string s={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());
    }
    
    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]);