试图将char转换为整数

时间:2017-11-03 17:44:33

标签: c++

所以我试图使用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])); 
}

2 个答案:

答案 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);
}