所以我试图使用date
函数在以下代码中生成char类型的变量atoi()
的总和。但是当这样做时,它会返回以下错误消息:test.cpp:9:25: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
我似乎无法弄清楚问题是什么,帮助会很大程度上受到欢迎。
#include <iostream>
using namespace std;
int calcNumber(const char* date, const int arraySize)
{
int sum(0);
for (int count=0; count<arraySize; count++) {
sum += atoi(date[count]);
}
return sum;
}
int main()
{
char date[] = "131083";
cout << calcNumber(date, sizeof(date) / sizeof(date[0]));
}
答案 0 :(得分:1)
date[count]
是一个char
,可能是'3'
(即ASCII代码51,因此它与(char)51
相同。
要将其转换为较小的数字(例如3),请使用date[count]-'0'
(当然'0'
也是char
常量字面值,其值在ASCII中为48; ASCII编码使得数字字形由连续代码编码。)
顺便说一下,你想停在零字节上(终止每个字符串)。所以你可以使用
for (int count=0; date[count] != (char)0; count++) {
sum += atoi(date[count]);
}
那么你甚至不需要传递任何arraySize
。
实际上,你正在重新发明(不好)std::atoi
(或strtol
)。您的calcNumber
会处理错误的字符串,例如"2X"
(但std::atoi("2X")
给出2更有意义)。而且calcNumber
在"-34"
或" 1"
上也表现不佳......
答案 1 :(得分:1)
std::atoi函数需要const char*
类型。当您使用const char*
运算符取消引用类型[]
的指针时,您将提供char
类型。那就是说你需要的是std::strlen函数来确定字符数组-1
的长度来解决\0
空终止字符和count <= arraySize
条件:
#include <iostream>
int calcNumber(const char* date, const size_t arraySize) {
int sum = 0;
for (int count = 0; count <= arraySize; count++) {
sum += date[count] - '0';
}
return sum;
}
int main() {
const char* p = "1234";
std::cout << calcNumber(p, strlen(p) - 1);
}