我试图从字符串中提取特定的char并将其转换为int。我尝试了以下代码,但我不清楚它为什么不起作用,也无法找到转换的方法。
int value = 0;
std::string s = "#/5";
value = std::atoi(s[2]); // want value == 5
答案 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]));
你应该得到一个错误,说这个论点不是正确的类型。