在C++中将char转换为int

Converting char to int in C++

本文关键字:int 转换 char C++ 中将      更新时间:2023-10-16

我试图将一个字符从c字符串转换为int,但一直遇到错误。

这是我的代码

while(std::getline(file, line)){
            if(std::isdigit(line[0]) && std::isspace(line[1]) && std::isdigit(line[2])){
                SequenceArray.push_back(line);
                if(std::stoi(line[2])== (SequenceArray.size() -1)){
                    std::cout<< "Success" << std::endl;

我一直得到的错误如下:

 a1.cpp: In function ‘int main(int, char**)’:
a1.cpp:30:25: error: call of overloaded ‘stoi(char&)’ is ambiguous
     if(std::stoi(line[2])== (SequenceArray.size() -1)){
                         ^
a1.cpp:30:25: note: candidates are:
In file included from /usr/include/c++/4.8/string:52:0,
                 from /usr/include/c++/4.8/bits/locale_classes.h:40,
                 from /usr/include/c++/4.8/bits/ios_base.h:41,
                 from /usr/include/c++/4.8/ios:42,
                 from /usr/include/c++/4.8/ostream:38,
                 from /usr/include/c++/4.8/iostream:39,
                 from a1.cpp:1:
/usr/include/c++/4.8/bits/basic_string.h:2823:3: note: int std::stoi(const string&, std::size_t*, int) <near match>
   stoi(const string& __str, size_t* __idx = 0, int __base = 10)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2823:3: note:   no known conversion for argument 1 from ‘char’ to ‘const string& {aka const std::basic_string<char>&}’
/usr/include/c++/4.8/bits/basic_string.h:2926:3: note: int std::stoi(const wstring&, std::size_t*, int) <near match>
   stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
   ^
/usr/include/c++/4.8/bits/basic_string.h:2926:3: note:   no known conversion for argument 1 from ‘char’ to ‘const wstring& {aka const std::basic_string<wchar_t>&}’
a1.cpp:35:6: warning: label ‘std’ defined but not used [-Wunused-label]
      std:exit(EXIT_FAILURE);

char隐式转换为int,不需要使用额外的函数。

ASCII表后面的"a"=97、"b"=98、"c"=99等

所以如果你写,

char a_char = 'a';
int a_val = a_char;
cout << a_val << endl;  

你有:

97

如果缺少std::stoi,请尝试#include <string>(并启用C++11)。但是,请参阅此线程-g++的Windows端口在支持stoito_string方面存在长期问题。

第二个错误是std:exit应该是std::exit

第三个错误是由于line[2].c_str()。您没有告诉我们line是什么,但错误消息表明它是std::string。所以line[2]char,而char不具有任何成员函数。如果你在代码std::atoi(line[2].c_str())中解释你想做什么,就会有人帮你。也许你指的是line[2] - '0',如果行中的第三个字符是数字,它将给出一个介于09之间的整数。

std::stoi()是C++11。并非所有编译器都默认启用C++11。

第一个错误是因为您没有启用C++11支持。GCC目前默认选择C++03,而stoi在那个版本中并不存在。

-std=c++11添加到编译器的参数中。如果这不起作用,请尝试-std=c++0x,并考虑获得更新的编译器。如果您使用的是一个古老的编译器,那么可以像最初发布的代码中那样使用atoi(如果您想检测错误,也可以使用涉及strtol的代码)。

还要确保为该函数的声明包含了<string>

第二个错误是因为您编写了:而不是::