C++中从"char"到"const char*"的转换无效

Invalid conversion from 'char' to 'const Char*' in C++

本文关键字:char 转换 无效 中从 C++ const      更新时间:2023-10-16

我声明了一个函数(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

当我尝试将num1num2等作为参数传递给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');
}

相反。