我正在寻找将数字打印到一个右对齐列中的文件的方法。
我的输入是字符串。
示例:
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
答案 0 :(得分:4)
std::right
,std::setw
和std::numeric_limits<T>::max_digits10
是您需要的工具:
out << std::right
将out
流设置为右对齐。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
通过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());
}