从字符串中提取单个字符并将其转换为 int

Posted

技术标签:

【中文标题】从字符串中提取单个字符并将其转换为 int【英文标题】:Pulling a single char from a string and converting it to int 【发布时间】:2018-03-21 23:58:53 【问题描述】:

我正在尝试从字符串中提取特定字符并将其转换为 int。我已经尝试了以下代码,但我不清楚它为什么不起作用,也找不到进行转换的方法。

int value = 0;
std::string s = "#/5";

value = std::atoi(s[2]);  // want value == 5

【问题讨论】:

您必须先跳过(扫描)非数字字符。见std::isdigit 对于字符’0’..’9’,你可以减去’0’得到字符所代表的数字。 atoi() 采用 C 风格的字符串(字符指针)。如果只需要转换一位数,请减去'0' std::stoi 接受一个字符串参数——您可能可以采用适当的子字符串,然后使用该函数。 【参考方案1】:

您可以从一个字符创建std::string 并使用std::stoi 转换为整数。

#include <iostream>
#include <string.h>
using namespace std;

int main() 
  int value = 0;
  string s = "#/5";
  value = stoi(string(1, s[2])); //conversion
  cout << value;

【讨论】:

【参考方案2】:

你可以写:

std::string s = "#/5";
std::string substring = s.substr(2, 1);
int value = std::stoi(substring);

使用std::stringsubstr 方法提取要解析为整数的子字符串,然后使用stoi(需要std::string)而不是atoi(需要const char *)。

【讨论】:

【参考方案3】:

您应该更仔细地阅读atoi() 的手册页。实际原型是:

 int atoi(const char *string)

您试图传递单个字符而不是指向字符数组的指针。换句话说,通过使用s[2],您正在取消引用指针。相反,您可以使用:

 value = std::atoi(s+2);

或者:

 value = std::atoi(&s[2]);

此代码不会取消引用指针。

【讨论】:

【参考方案4】:

std::atoi 的参数必须是 char*,但 s[2]char。你需要使用它的地址。而要从std::string 中获取有效的C 字符串,您需要使用c_str() 方法。

value = std::atoi(&(s.c_str()[2]));

你应该得到一个错误,说参数的类型不正确。

【讨论】:

std::string 不包含空终止符,因此即使它类型检查,此答案也是错误的。您最终可能会遇到段错误。 糟糕,没有注意到它是std::string,假设为char * @jcarpenter2 我已经修改为使用.c_str()

以上是关于从字符串中提取单个字符并将其转换为 int的主要内容,如果未能解决你的问题,请参考以下文章

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

如何从字符串中获取子字符串并将另一个字符串附加到字符串并将其转换为数组

android - 如何将 int 转换为字符串并将其放在 EditText 中?

从 Ruby 数据哈希中提取值并将值连接成单个连续字符串

如何从字符串中提取文本并将其保存为两列并在第三列的末尾添加字符

从 int 获取单个数字以在 C/C++ 中进行基数排序的最佳方法