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

时间:2018-03-21 23:58:53

标签: c++ string char atoi

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

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

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

4 个答案:

答案 0 :(得分:2)

您可以从一个字符创建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;
}

答案 1 :(得分:1)

你可以写:

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

使用substr的{​​{1}}方法将要解析的子字符串拉出为整数,然后使用std::string(取stoi}代替std::string的{​​atoi

答案 2 :(得分:0)

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

 int atoi(const char *string)

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

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

或者:

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

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

答案 3 :(得分:0)

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

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

你应该得到一个错误,说这个论点不是正确的类型。