字符串加法或减法运算符

时间:2012-12-21 20:46:51

标签: c++ string operators

如何添加或减去字符串的值?例如:

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

2 个答案:

答案 0 :(得分:2)

您可以使用atoi(number_string.c_str())将字符串转换为整数。

如果您担心正确处理非数字输入,strtol是一个更好的选择,尽管有点罗嗦。 http://www.cplusplus.com/reference/cstdlib/strtol/

答案 1 :(得分:1)

您希望整个时间使用整数,然后在最后转换为std::string

如果您有支持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(无论采用何种方法,您都必须执行此步骤),然后添加它们,然后将其转换回{ {1}}。在其他语言中,比如PHP,试图猜测你的意思并添加它们,无论如何它们都是在引擎盖下做的。

这两种解决方案都有许多优点。他们是faster,他们使用例外情况报告错误,而不是默默地显示工作,并且他们不需要额外的中间转换。

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