在C++中将char转换为int
Converting char to int in 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);
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端口在支持stoi
和to_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'
,如果行中的第三个字符是数字,它将给出一个介于0
和9
之间的整数。
std::stoi()是C++11。并非所有编译器都默认启用C++11。
第一个错误是因为您没有启用C++11支持。GCC目前默认选择C++03,而stoi
在那个版本中并不存在。
将-std=c++11
添加到编译器的参数中。如果这不起作用,请尝试-std=c++0x
,并考虑获得更新的编译器。如果您使用的是一个古老的编译器,那么可以像最初发布的代码中那样使用atoi
(如果您想检测错误,也可以使用涉及strtol
的代码)。
还要确保为该函数的声明包含了<string>
。
第二个错误是因为您编写了:
而不是::
。
相关文章:
- 是否可以从int转换为enum类类型
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 将字符串中的 int 转换为字母;
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何将矢量<int>转换为字符数组?
- C++ 无法从 const int* 转换为 const_iterator
- 我不断收到错误 C2440'=':无法从"int *(__cdecl *)(int *,int *,int,int)"转换为"int *
- 如何将 int[4] 转换为 std::array<int,4>?
- 如何将data[i].int转换为vaible
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 将私有矩阵形式 int 转换为双 C++
- 无法将参数 1 从 'int' 转换为 'int &'
- 将 int 转换为字符串后始终得到 0
- isspace 函数的性能警告,从 int 转换为布尔值
- 将大 int 转换为浮点数,而不舍入 c++
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将未签名的INT转换为BCD
- 在 C++ 中将 int 转换为双精度