2

因此,我试图强制在 an 之前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;
}

想法是输入 a int,然后将其转换为 astringstream以拆分为单个字符,然后返回为整数。但是,任何小于数字 10 (<10) 的东西,我都需要在左边用 0 填充。

多谢你们

编辑:您在上面看到的代码只是我的主要代码的一个片段,这是我试图使工作的一点。

很多人很难理解我的意思。所以,这是我的想法。好的,所以该项目的整个想法是接受用户输入(时间(小时,分钟)天(数字,月数)等)。现在,我需要将这些数字分解为相应的向量(vec_minute、vec_hour 等),然后使用这些向量来指定文件名。例如:cout << vec_hour[0] << ".png"; cout << vec_hour[1] << ".png";

现在,我知道我可以使用 for 循环来处理向量的输出,我只需要帮助将输入分解为单个字符。由于我要求用户将所有数字输入为 2 位数字,因此数字 10 以下的任何数字(前面有 0 的数字)都不会拆分为数字,因为程序会在数字传递给拆分方法之前自动删除其前面的 0(即。您输入 10,您的输出将是 10,您输入 0\n9,您的输出将是一位数 9)。我不能有这个,我需要在它传递给 split 方法之前用 0 填充任何小于 10 的数字,因此它将返回 2 个拆分数字。我将整数转换为字符串流,因为那是我发现的拆分数据类型的最佳方法(以防您想知道)。

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

4

3 回答 3

14

如果我正确理解您的问题,您可以将这些操纵器与 a 一起使用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();
}

以及相应的现场示例

于 2013-06-18T17:57:46.250 回答
1

int和其他数字类型存储。在整数值前面粘贴 a0不会更改该值。只有当您将其转换为文本表示时,添加前导0才会更改您所拥有的内容,因为您已通过插入附加字符来更改文本表示。

于 2013-06-18T23:29:12.187 回答
-1

XY 问题,我认为

for ( int i = 0; i < POWER_OF_TEN; i++ )
{
  vector<int>.push_back(num%10);
  num /= 10
}

?

如果需要,然后反转向量

是的,我知道这不是真正的代码

如果你真的想要角色,vector<char>.push_back(num%10 + '0')

于 2013-06-18T18:31:34.140 回答