0

文字列の値を加算または減算する方法は? 例えば:

    std::string number_string;
    std::string total;

    cout << "Enter value to add";
    std::getline(std::cin, number_string;
    total = number_string + number_string;
    cout << total;

これは文字列を追加するだけなので、これは機能しません。int データ型を使用できることはわかっていますが、string を使用する必要があります。

4

2 に答える 2

2

atoi(number_string.c_str())文字列を整数に変換するために使用できます。

数値以外の入力を適切に処理することに関心がある場合strtolは、少し冗長ではありますが、より良い選択です。http://www.cplusplus.com/reference/cstdlib/strtol/

于 2012-12-21T20:49:00.550 に答える
1

ずっと整数で作業し、std::string最後に a に変換する必要があります。

C++11 対応のコンパイラがある場合に機能するソリューションを次に示します。

#include <string>

std::string sum(std::string const & old_total, std::string const & input) {
    int const total = std::stoi(old_total);
    int const addend = std::stoi(input);
    return std::to_string(total + addend);
}

それ以外の場合は、boostを使用します。

#include <string>
#include <boost/lexical_cast.hpp>

std::string sum(std::string const & old_total, std::string const & input) {
    int const total = boost::lexical_cast<int>(old_total);
    int const addend = boost::lexical_cast<int>(input);
    return boost::lexical_cast<std::string>(total + addend);
}

この関数は、最初にそれぞれを に変換std::stringint(どのようなアプローチをとっても、実行しなければならないステップです)、それらを追加してから に戻しstd::stringます。PHP のように、意味を推測して追加しようとする他の言語では、いずれにせよ、内部でこれを行っています。

これらのソリューションには両方とも多くの利点があります。それらはより高速であり、黙って動作しているように見えるのではなく、例外とともにエラーを報告し、追加の中間変換を必要としません。

Boost ソリューションのセットアップには少し手間がかかりますが、その価値は間違いなくあります。Boost はおそらく、C++ 開発者にとって最も重要なツールですが、おそらくコンパイラは例外です。彼らはすでに一流の仕事をしており、あなたが将来直面するであろう多くの問題を解決しているので、あなたは他のことのためにそれを必要とするでしょう. Boost のインストールに必要な作業は、Boost を使用することで節約できる時間よりもはるかに少なくなります。

于 2012-12-21T21:42:59.080 に答える