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 数据类型,但我需要使用字符串。

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::string转换为int(无论您采用何种方法,您都必须执行的步骤),然后添加它们,然后将其转换回std::string. 在其他语言中,例如 PHP,尝试猜测您的意思并添加它们,无论如何,它们都是在后台执行此操作。

这两种解决方案都有许多优点。它们速度更快,它们报告错误时会出现异常,而不是默默地工作,而且它们不需要额外的中间转换。

Boost 解决方案确实需要进行一些设置工作,但绝对值得。Boost 可能是任何 C++ 开发人员工作中最重要的工具,除了编译器。您将需要它来做其他事情,因为他们已经完成了一流的工作,解决了您将来会遇到的许多问题,因此您最好开始获得它的经验。安装 Boost 所需的工作比使用它节省的时间要少得多。

于 2012-12-21T21:42:59.080 回答