如何从std :: string中取2个字符并在C ++中将其转换为int?

时间:2014-01-08 15:31:17

标签: c++ string vector type-conversion stdstring

在C ++中,我有一个字符串,例如std::string string = "1234567890"

我有一个定义为std::vector<int> vec

的整数向量

如何计算vec = stoi(string.at(1) + string.at(2)),以便它可以为我提供可以插入此向量的整数12

4 个答案:

答案 0 :(得分:8)

根据我的理解,您希望将前2个字符作为字符串检索,将其转换为int并插入到矢量中:

std::vector<int> vec;
std::string str = "1234567890";

// retrieve the number:
int i;
std::istringstream(str.substr(0,2)) >> i;

// insert it to the vector:
vec.push_back(i);

在C ++ 11支持下,您可以使用std::stoi而不是字符串流。

答案 1 :(得分:3)

使用字符串流:

#include <sstream>

std::stringstream ss(string.substr(0,2));
int number;
ss >> number;

答案 2 :(得分:2)

最简单的方法是提取子字符串而不是单个字符。使用operator +来隐藏它们,并在结果字符串上调用stoi

vec.push_back(stoi(string.substr(0, 1) + string.substr(1, 1)));
// vec now ends with 12

以上将在源字符串中的任意位置连接字符串。如果您确实只需要提取连续字符,则只需拨打一次substr即可:

vec.push_back(stoi(string.substr(0, 2)));

答案 3 :(得分:0)

正如我已经正确理解你,你想要从字符串的前两个字符形成一个整数。然后可以通过以下方式完成

std::vector<int> vec = { ( ( s.length() >= 1 && is_digit( s[0] ) ) ? s[0] - '0' : 0 ) * 10 +
                         ( ( s.length() > 1 && is_digit( s[1] ) ) ? s[1] - '0' : 0 ) };

一般方法如下

std::string s = "123456789";
std::vector<int> v( 1, std::accumulate( s.begin(), s.end(), 0,
    []( int acc, char c ) { return ( isdigit( c ) ? 10 * acc + c - '0' : acc ); } ) );

std::cout << v[0] << std::endl;

您只需要为字符串指定所需的迭代器范围。