如何强制前面的0到一个int(没有实际输出它)

时间:2013-06-18 17:55:46

标签: c++

所以我试图将前一个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个分割数字。我将整数转换为字符串流,因为这是我找到的分割数据类型的最佳方法(包括你想知道)。

希望我能更好地解释一切:/

3 个答案:

答案 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')