C++中从"char"到"const char*"的转换无效
Invalid conversion from 'char' to 'const Char*' in C++
我声明了一个函数(C++)
int products(char num1, char num2, char num3, char num4, char num5);
但是我的编译器给了我这个错误:
Invalid conversion from 'char' to 'const Char*'
error initializing argument 1 of 'int atoi (const char*)' on line 22
当我尝试将num1
、num2
等作为参数传递给atoi
时。
#include<iostream>
#include<string>
using namespace std;
int Product(char num1, char num2, char num3, char num4, char num5);
const string LargeNum = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
int main(){
int greatestVal = 0;
for(int i = 0; i + 4 <= LargeNum.length(); i++ ){
if(greatestVal < Product(LargeNum[i], LargeNum[i+1], LargeNum[i+2], LargeNum[i+3], LargeNum[i+4])){
greatestVal = Product(LargeNum[i], LargeNum[i+1], LargeNum[i+2], LargeNum[i+3], LargeNum[i+4]);
}
}
cout << greatestVal << endl;
system("PAUSE");
}
int Product(char num1, char num2, char num3, char num4, char num5){
return (atoi(num1)*atoi(num2)*atoi(num3)*atoi(num4)*atoi(num5));
}
atoi
采用const char*
(即以空结尾的字符序列)。你给它提供单一的char
,所以编译器抱怨。如何修复它取决于您要执行的操作。
我猜你想把一个代表数字的字符转换为整数,将'0'转换为0,'1'转换为1等。如果是这样,那么正确的代码将是
return (num1 - '0')*(num2 - '0')*(num3 - '0')*(num4 - '0')*(num5 - '0');
这是有效的,因为当您对字符进行算术运算时,字符会自动转换为整数,还因为字符"0"到"9"保证按顺序排列,因此将数字转换为整数所需要做的就是从中减去"0"。
请先查看atoi
的文档。它把const char*
当作论据,而你把char
传递给它。这绝对是一个错误。
另外,您不需要atoi
.如果你想 转换为'7'
7
,那么只需从中减去'0'
。所以你可能想要的是这个:
int Product(char num1, char num2, char num3, char num4, char num5)
{
return (num1-'0')*(num2-'0')*(num3-'0')*(num4-'0')*(num5-'0');
}
函数 atoi 需要类型为 const char*
(字符串)的参数,您正在向其传递单个字符。
如果要从包含单个数字的字符中检索整数值,可以使用'0'
字符。
atoi
期望const char*
作为参数,而您正在给它一个char
。错误消息非常清楚。
要将char
转换为int
,您可以执行以下操作num1 - '0'
:
int Product(char num1, char num2, char num3, char num4, char num5){
return (num1-'0')*(num2-'0')*(num3-'0')*(num4-'0')*(num5-'0');
}
正如许多人所说,您可以使用 char - '0' 将字符转换为整数。这是因为在 ASCII 中,0-9 由数字 48-57 表示,所以如果你去掉相当于 48 的"0",只要你传入一个数字 0 到 9,它就会给你留下 0-9 之间的结果。
请注意,不要循环超过LargeNum的末尾,因为您当前正在循环到字符串的末尾并访问3。你可能想循环到 LargeNum.length - 3;
出现编译错误的原因是,传递给该方法的参数集没有匹配的重载。编译器尝试查找最接近的匹配项(在您的情况下为 char 和 const char*),然后报告该错误。
请注意,atoi 不起作用,因为 atoi 接受一个字符串而不是一个字符——因为大多数数字都有不止一个数字的充分理由!
您可以这样做:
int Product(char num1, char num2, char num3, char num4, char num5){
return (num1 - '0')*(num2 - '0')*(num3 - '0')*(num4 - '0')*(num5 - '0');
}
相反。
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串