从字符串中提取单个字符并将其转换为 int
Pulling a single char from a string and converting it to int
我正在尝试从字符串中提取特定的字符并将其转换为整数。我尝试了以下代码,但我不清楚为什么它不起作用,也无法找到进行转换的方法。
int value = 0;
std::string s = "#/5";
value = std::atoi(s[2]); // want value == 5
您应该更仔细地阅读 atoi()
的手册页。实际原型为:
int atoi(const char *string)
您试图传递单个字符而不是指向字符数组的指针。换句话说,通过使用 s[2]
您正在取消引用指针。您可以改为使用:
value = std::atoi(s+2);
或者:
value = std::atoi(&s[2]);
此代码不会取消引用指针。
std::atoi
的参数必须是 char*
,但 s[2]
是 char
。您需要使用它的地址。要从 std::string
中获取有效的 C 字符串,您需要使用 c_str()
方法。
value = std::atoi(&(s.c_str()[2]));
你应该得到一个错误,指出参数类型不正确。
你可以写:
std::string s = "#/5";
std::string substring = s.substr(2, 1);
int value = std::stoi(substring);
使用std::string
的substr
方法将要解析的子串提取为整数,然后使用stoi
(取一个std::string
) 而不是 atoi
(需要 const char *
)。
您可以从一个字符创建 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;
}
我正在尝试从字符串中提取特定的字符并将其转换为整数。我尝试了以下代码,但我不清楚为什么它不起作用,也无法找到进行转换的方法。
int value = 0;
std::string s = "#/5";
value = std::atoi(s[2]); // want value == 5
您应该更仔细地阅读 atoi()
的手册页。实际原型为:
int atoi(const char *string)
您试图传递单个字符而不是指向字符数组的指针。换句话说,通过使用 s[2]
您正在取消引用指针。您可以改为使用:
value = std::atoi(s+2);
或者:
value = std::atoi(&s[2]);
此代码不会取消引用指针。
std::atoi
的参数必须是 char*
,但 s[2]
是 char
。您需要使用它的地址。要从 std::string
中获取有效的 C 字符串,您需要使用 c_str()
方法。
value = std::atoi(&(s.c_str()[2]));
你应该得到一个错误,指出参数类型不正确。
你可以写:
std::string s = "#/5";
std::string substring = s.substr(2, 1);
int value = std::stoi(substring);
使用std::string
的substr
方法将要解析的子串提取为整数,然后使用stoi
(取一个std::string
) 而不是 atoi
(需要 const char *
)。
您可以从一个字符创建 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;
}