如何将从字符串中获取的字符转换为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 字符集)

  1. ... 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;
}

Live Code

根据文档:

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);