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

Posted

技术标签:

【中文标题】如何从 std::string 中获取 2 个字符并将其转换为 C++ 中的 int?【英文标题】:How to take 2 characters from std::string and convert it to int in C++? 【发布时间】:2014-01-08 15:31:17 【问题描述】:

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

我有一个整数向量定义为std::vector<int> vec

我如何计算vec = stoi(string.at(1) + string.at(2)),这样它会给我一个整数12,我可以插入到这个向量中?

【问题讨论】:

stoi 返回一个整数。你想如何将它分配给vec。我不明白你想做什么。 您想将整个字符串转换为一个数字,还是一次转换两个字符,或者究竟是什么? 我真的不明白这个帖子,标题可以写得更好:( 【参考方案1】:

据我了解,您希望将前 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 代替字符串流。

【讨论】:

std::stoi 是否需要 C++11 支持...? @Mhd.Tahawi:是的,但是在 C++03 中也有 strtol 我使用了不同的 awnser,因为我不喜欢流的想法,但我确实在我的程序中使用了 C++11 方法 stoi 和 to_string。 @NictraSavios: 当然:)【参考方案2】:

使用字符串流:

#include <sstream>

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

【讨论】:

【参考方案3】:

最简单的方法是提取子字符串而不是单个字符。使用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)));

【讨论】:

既然他们一个接一个,vec.push_back(atoi(string.substr(0,2))) 会工作吗? 这取决于你想要什么。你的问题不清楚。 @NictraSavios 是的;我已经编辑了答案以明确这一点。 atoi(string.substr(0, 2).c_str()) = stoi(string.substr(0, 2))(已在问题中使用)【参考方案4】:

正如我正确理解的那样,您希望从字符串的前两个字符形成一个整数。然后可以通过以下方式完成

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;

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

【讨论】:

以上是关于如何从 std::string 中获取 2 个字符并将其转换为 C++ 中的 int?的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ 中的 std::string 获取字节

如何获取 std::string 中的字符数?

如何知道std :: string是否正确编码?

从 std::string 和 std::wstring 获取 char 整数值

C++ 字符串 - 如何避免获取无效指针?

使用类似 strndup 的语义从 char[] 创建 std::string