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]);