如何添加或减去字符串的值?例如:
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数据类型,但我需要使用字符串。
答案 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所需的工作远远少于使用它所节省的时间。