私はこれを尋ねる前にどこでも検索してきましたが、何も見つかりませんでした。私のSchaumsProgrammingwithC ++ Bookには、私がどちらかから自己学習していることについての言及はありません...
C ++を使用して、文字列をどのように変換できますか(例:"0:03:22" to 3 separate int values of
0、03 and
22`)?その可能性を前提としています。
何かのようなもの
std::string str="0:03:22";
std::istringstream ss(str);
int hours,mins,seconds;
char skip;
if(ss >> hours >> skip >> mins >> skip >> seconds) {
//success
}
ここでは、各要素を抽出できるストリームを作成しています。
最初に文字列を3つのトークンに解析してから、std stringstreamを使用するか、lexical_castをブーストしてトークンを整数に変換します。
個人的には、':'でboost :: splitを使用し、文字列のベクトルを取得してから、それらに対してboost::lexical_castを実行します。lexical_castに取って代わる可能性のある、より最新の変換ライブラリがあると思いますが、自分でそれを探す必要があります。Splitは文字列アルゴリズムライブラリにあります。
いくつかの選択肢よりも遅くなりますが、超高速である理由がない限り、作成と変更が簡単であるため、勝ちます。
sscanfを使用します。また、変換された値の数も返します。
char* input = "0:03:22";
int a, b, c;
if (sscanf(input, "%d:%d:%d", &a, &b, &c) == 3)
{
printf("Three values converted: %u, %u, %u\n", a, b, c);
}
単純なフォーマットされた抽出でうまくいくはずです。
#include <sstream>
std::istringstream iss("0:03:22");
int a, b, c;
char d1, d2;
if (iss >> a >> d1 >> b >> d2 >> c >> std::ws &&
iss.get() == EOF && d1 == ':' && d2 == ':')
{
// use a, b, c
}
else
{
// error!
}
条件付きチェックを必ず含めてください。入力操作が成功した場合にのみa
、、から読み取ることができます。b
c