所以我试图将前一个0
强制转换为int
,以便稍后处理。{现在,我在SO或任何其他网站上看到的所有教程都使用类似的东西:
cout << setfill('0') << setw(2) << x ;
虽然这很棒,但我似乎只能使用cout
,但是,我不想输出我的文字,我只想填充数字,以备日后使用。
到目前为止,这是我的代码..
#include <iostream>
#include <string>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <sstream>
/*
using std::string;
using std::cout;
using std::setprecision;
using std::fixed;
using std::scientific;
using std::cin;
using std::vector;
*/
using namespace std;
void split(const string &str, vector<string> &splits, size_t length = 1)
{
size_t pos = 0;
splits.clear(); // assure vector is empty
while(pos < str.length()) // while not at the end
{
splits.push_back(str.substr(pos, length)); // append the substring
pos += length; // and goto next block
}
}
int main()
{
int int_hour;
vector<string> vec_hour;
vector<int> vec_temp;
cout << "Enter Hour: ";
cin >> int_hour;
stringstream str_hour;
str_hour << int_hour;
cout << "Hour Digits:" << endl;
split(str_hour.str(), vec_hour, 1);
for(int i = 0; i < vec_hour.size(); i++)
{
int_hour = atoi(vec_hour[i].c_str());
printf( "%02i", int_hour);
cout << "\n";
}
return 0;
}
想法是输入int
,然后将其转换为stringstream
以分割成单个字符,然后返回整数。但是,任何小于10(<10)的东西,我需要在左边用0填充。
谢谢你们
编辑: 您在上面看到的代码只是我主要代码的一小部分,这是我努力工作的一点。
很多人都无法理解我的意思。所以,这是我的想法。好的,所以项目的整个想法是接受用户输入(时间(小时,分钟)日(数字,月号)等)。现在,我需要将这些数字分解为相应的向量(vec_minute,vec_hour等),然后使用向量指定文件名..所以像: cout&lt;&lt; vec_hour [0]&lt;&lt; “png格式”; cout&lt;&lt; vec_hour [1]&lt;&lt; “.PNG”;
现在,我知道我可以使用for循环来处理向量的输出,我只需要帮助将输入分解为单个字符。因为我要求用户将所有数字输入为2位数,所以10号以下的数字(前面带有0的数字)不会分成数字,因为程序会在数字传递给split方法之前自动删除其前面的0(即。输入10,输出为10,输入0 \ n9,输出为单个数字9)。我不能这样,我需要在传递给split方法之前用0填充小于10的任何数字,因此它将返回2个分割数字。我将整数转换为字符串流,因为这是我找到的分割数据类型的最佳方法(包括你想知道)。
希望我能更好地解释一切:/
答案 0 :(得分:14)
如果我理解你的问题,你可以使用stringstream
的那些操纵者,例如:
std::stringstream str_hour;
str_hour << setfill('0') << setw(2) << int_hour;
字符串流是输出流,因此I / O操纵器会影响它们,就像它们影响std::cout
的行为一样。
一个完整的例子:
#include <sstream>
#include <iostream>
#include <iomanip>
int main()
{
std::stringstream ss;
ss << std::setfill('0') << std::setw(2) << 10; // Prints 10
ss << " - ";
ss << std::setfill('0') << std::setw(2) << 5; // Prints 05
std::cout << ss.str();
}
以及相应的live example。
答案 1 :(得分:1)
int
和其他数字类型存储值。在整数值前粘贴0
不会更改该值。只有当您将其转换为文本表示时,添加前导0
才会更改您拥有的内容,因为您已通过插入其他字符来更改文本表示。
答案 2 :(得分:-1)
X-Y问题,我想
for ( int i = 0; i < POWER_OF_TEN; i++ )
{
vector<int>.push_back(num%10);
num /= 10
}
如果需要,则反转矢量
是的,我知道这不是真正的代码
如果你真的想要字符,vector<char>.push_back(num%10 + '0')
?