そのため、後で処理できるように、先行0
を強制しようとしています。int
さて、私が SO または他の Web サイトで見たすべてのチュートリアルは、すべて次のようなものを使用しています。
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
を入力し、それを astringstream
にキャストして単一の文字に分割し、整数に戻すというアイデアです。ただし、10 未満 (<10) の場合は、左側に 0 を埋め込む必要があります。
みんなありがとう
編集: 上記のコードは、私のメイン コードの一部にすぎません。これは、動作させようとしている部分です。
多くの人が私の言いたいことを理解するのに苦労しています。だから、ここに私の考えがあります。さて、プロジェクトの全体的なアイデアは、ユーザー入力 (時間 (時間、分) 日 (数値、月番号) など) を取得することです。ここで、これらの数値を対応するベクトル (vec_minute、vec_hour など) に分解し、そのベクトルを使用してファイル名を指定する必要があります.. cout << vec_hour[0] << ".png"; cout << vec_hour[1] << ".png";
これで、 for ループを使用してベクトルの出力を処理できることがわかりました。入力を個々の文字に分解するのに助けが必要です。ユーザーにすべての数字を 2 桁で入力するように求めているため、数字が分割メソッドに渡される前に、プログラムが先行する 0 を自動的に削除するため、数字 10 (数字の前に 0 が付く) より下のものは数字に分割されません (つまり、. 10 を入力すると、出力は 10 になり、0\n9 を入力すると、出力は 1 桁の 9 になります)。私はこれを持つことができません。分割メソッドに渡される前に、10 未満の数字を 0 で埋める必要があるため、2 つの分割数字が返されます。私が見つけたデータ型を分割するための最良の方法であるため、整数を文字列ストリームにキャストします (ご参考までに)。
私がすべてをもっとよく説明してくれることを願っています:/