在C ++中将char转换为int

时间:2015-02-05 13:00:12

标签: c++

我试图将字符从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);

4 个答案:

答案 0 :(得分:3)

char 隐式转换为 int ,您不需要使用额外的功能。

&#39;一个&#39; = 97,&#39; b&#39;在ASCII

之后,= 98,&#39; c&#39; = 99等

所以,如果你写,

char a_char = 'a';
int a_val = a_char;
cout << a_val << endl;  
你有:

97

答案 1 :(得分:1)

如果std::stoi丢失,请尝试#include <string>(并启用C ++ 11)。但是另请参阅this thread - g ++的Windows端口在支持stoito_string时遇到了长期存在的问题。

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

第三个错误是因为line[2].c_str()。您尚未告诉我们line是什么,但错误消息表明它是std::string。因此line[2]charchar没有任何成员函数。如果您在代码std::atoi(line[2].c_str())中解释您要执行的操作,则有人可以提供帮助。也许你的意思是line[2] - '0',如果该行中的第三个字符是数字,它将在09之间给出一个整数。

答案 2 :(得分:0)

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

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

另外,请确保您已包含<string>声明该功能。

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

答案 3 :(得分:0)

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