如何将从字符串中获取的字符转换为int?
How to convert a character taken from a string to an int?
所以我有一个包含数字的字符串,我想取其中一个数字并将其转换为这样的 int :
string s = "13245";
int a = stoi(s.at(3));
我试过 stoi :
int a = stoi(s.at(3));
我试过atoi :
int a = atoi(s.at(3));
但是 none 这些方法有效,我发现的唯一方法是 C 方法 :
int a = s.at(3)-'0';
你知道为什么 stoi / atoi 不起作用吗?您还有其他方法可以将字符串中的字符转换为 int 吗?
函数 stoi
需要一个 std::string 类型的对象。 C 函数 atoi
需要一个指向字符串的 char *
类型的对象。当您处理 char 类型的对象时。
这个
int a = s.at(3)-'0';
是将数字字符的内部表示转换为对应的整数值的常用方法,因为数字代码之间没有间隙。
来自 C++ 标准(2.3 字符集)
- ... In both the source and execution basic character sets, the value of
each character after 0 in the above list of decimal digits shall be
one greater than the value of the previous.
atoi 接受一个 const char*,而 s.at(index) returns 一个 char,因此编译器将 return 一个类型错误,而你可以执行以下操作:
string s = "13245";
auto c = s.at(3);
int a = atoi(&c);
std::string 是一个字符数组,而 .at(3) 或 [3] 将 return 你单个字符。
stoi 和 atoi 处理字符串(许多字符)并将像“-42”这样的字符串转换为其数字表示形式 -42。
#include <iostream>
#include <string>
int main() {
const std::string str = "1324509";
for(const char ch: str) {
const int a = ch & 0x0f; // the same as ch - '0';
printf("%i,",a);
}
return 0;
}
根据文档:
Stoi 解析 str 将其内容解释为指定基数的整数并返回一个 int 值。
int stoi (const string& str, size_t* idx = 0, int base = 10);
与您的代码并行:
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
string s = "13245";
cout << typeid(s.at(3)).name();
// Prints out 'c' which means 'char'
所以在使用stoi[=13=之前需要将char转换为string ]
#include <iostream>
#include <string>
using namespace std
string s = "13245";
string m(1,s.at(3));
int a = stoi(m);
所以我有一个包含数字的字符串,我想取其中一个数字并将其转换为这样的 int :
string s = "13245";
int a = stoi(s.at(3));
我试过 stoi :
int a = stoi(s.at(3));
我试过atoi :
int a = atoi(s.at(3));
但是 none 这些方法有效,我发现的唯一方法是 C 方法 :
int a = s.at(3)-'0';
你知道为什么 stoi / atoi 不起作用吗?您还有其他方法可以将字符串中的字符转换为 int 吗?
函数 stoi
需要一个 std::string 类型的对象。 C 函数 atoi
需要一个指向字符串的 char *
类型的对象。当您处理 char 类型的对象时。
这个
int a = s.at(3)-'0';
是将数字字符的内部表示转换为对应的整数值的常用方法,因为数字代码之间没有间隙。
来自 C++ 标准(2.3 字符集)
- ... In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
atoi 接受一个 const char*,而 s.at(index) returns 一个 char,因此编译器将 return 一个类型错误,而你可以执行以下操作:
string s = "13245";
auto c = s.at(3);
int a = atoi(&c);
std::string 是一个字符数组,而 .at(3) 或 [3] 将 return 你单个字符。 stoi 和 atoi 处理字符串(许多字符)并将像“-42”这样的字符串转换为其数字表示形式 -42。
#include <iostream>
#include <string>
int main() {
const std::string str = "1324509";
for(const char ch: str) {
const int a = ch & 0x0f; // the same as ch - '0';
printf("%i,",a);
}
return 0;
}
根据文档:
Stoi 解析 str 将其内容解释为指定基数的整数并返回一个 int 值。
int stoi (const string& str, size_t* idx = 0, int base = 10);
与您的代码并行:
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
string s = "13245";
cout << typeid(s.at(3)).name();
// Prints out 'c' which means 'char'
所以在使用stoi[=13=之前需要将char转换为string ]
#include <iostream>
#include <string>
using namespace std
string s = "13245";
string m(1,s.at(3));
int a = stoi(m);