0

私が見つけたすべての解決策はatollを使用しているようですが、文字列を持っている間はcharが必要です。たとえば、入力 $100 を読み取り、それを文字列に入れ、最初の文字が $ かどうかを確認します。次に、部分文字列を long long 型に変換する必要があります。

int main() {

    long long price;
    string priceStr;

    cin>>priceStr;
    if (priceStr[0] == '$') {
        price = convertToLongLong(priceStr.substr(1));//how?
    }else{
        cerr<<"error!";
    }

}

私の入力は: $100 ありがとう!

編集:多分私は適切な方法でそれをしていません。私の入力ストリームは、以下のような ID 名 $price #quantity であり、すべての数字が long long である必要があり、$ と # ため息が正しい場所にあるかどうかも確認します。

テレビ 1 台 $1500 #50

2 ラップトップ $2000 #30

4

4 に答える 4

1

STL が唯一のオプションである場合、いくつかのオプションがあります。

int main() {

    long long price;
    string priceStr;

    cin>>priceStr;
    if (priceStr[0] == '$') {
        std::istringstream is (priceStr.begin() + 1, priceStr.end());
        is >> price;
        if (!is)
            cerr << "fail!" << endl;
    }else{
        cerr<<"error!";
    }
}

ブーストを使用できる場合:

int main() {

    long long price;
    string priceStr;

    cin>>priceStr;
    if (priceStr[0] == '$') {
        price = boost::lexical_cast<long long>(&*priceStr.begin() + 1, priceStr.size() -1); // throws if it cannot convert.
    }else{
        cerr<<"error!";
    }
}

2 番目の例には境界チェックがないことに注意してください。上で示したことを実行する前に、境界チェックを実装する必要があります。(つまり、priceStr.size() >= 2 であることを確認してください)。

他の人が示唆しているように、のバリアントを使用できますがstoll、これらの関数はエラーを報告しないことに注意してください。

于 2013-03-29T03:16:29.157 に答える
1

使用するscanf

scanf("$%lld", &price);

編集

上記の参照を参照してください。入力をフォーマットするための迅速かつ簡単な方法。

if(scanf("%lld %s $%lld #%lld",
  &id, name, &price, &quantity)!=4) fprintf(stderr, "error!");

それ以外の場合は、より一般的な/標準的なソリューションについて他の回答を参照してください。

于 2013-03-29T02:32:30.743 に答える
0

ストールを使ってみる

http://www.cplusplus.com/reference/string/stoll/を参照してください。

私はこれを試したことがない

于 2015-12-29T07:24:40.507 に答える
0

文字列http://www.cplusplus.com/reference/string/string/のドキュメントを読んでください

そこに std::string から char* を取得する非常に明白な方法があります

于 2013-03-29T03:36:43.273 に答える