Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在尝试将字符转换为整数_C++ - Fatal编程技术网

C++ 正在尝试将字符转换为整数

C++ 正在尝试将字符转换为整数,c++,C++,因此,我试图使用atoi()函数在下面的代码中生成char类型的变量date的和。但执行此操作时,它会返回以下错误消息:test.cpp:9:25:error:从'char'到'const char*'[-fppermissive]的转换无效,而且我似乎不知道问题出在哪里,非常感谢您的帮助 #include <iostream> using namespace std; int calcNumber(const char* date, const int arraySize)

因此,我试图使用
atoi()
函数在下面的代码中生成char类型的变量
date
的和。但执行此操作时,它会返回以下错误消息:
test.cpp:9:25:error:从'char'到'const char*'[-fppermissive]
的转换无效,而且我似乎不知道问题出在哪里,非常感谢您的帮助

#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])); 
}
#包括
使用名称空间std;
int-calcNumber(常量字符*日期,常量int数组化)
{
整数和(0);

for(int count=0;count
date[count]
是单个
char
,可能是
'3'
(即代码51,因此它与
(char)51
)相同)

要将其转换为一个小数字(例如3),请使用
date[count]-“0”

(当然,
'0'
也是一个
字符
常量文字,其值为48(ASCII格式);ASCII编码是指数字符号由连续代码编码)

顺便说一句,您希望在零字节上停止(终止每个字符串)

for (int count=0; date[count] != (char)0; count++) {
    sum += atoi(date[count]); 
}
然后,您甚至不需要传递任何
数组化


实际上,您正在重新发明(很糟糕)(或)。您的
calcNumber
会处理不正确的字符串,如
“2X”
(但是
std::atoi(“2X”)
给出了2,这更有意义)。而且您的
calcNumber
“-34”
“1”上的行为也很糟糕

函数需要一个
常量字符*
类型。当使用
[]取消引用
常量字符*
类型的指针时
运算符您提供的是
字符
类型。也就是说,您需要一个函数来确定字符数组的长度
-1
,以处理
\0
空终止字符和
计数,只需使用
atoi(日期);
而不是您的函数。@user0042抱歉,我可能用词有误……我正试图通过数字数组进行迭代,并将它们相加生成一个总和。请参见此处。要自己生成总和,请使用
sum+=date[count]-“0”;
atoi
函数用于字符串,而不是字符。似乎不起作用,仍然会产生相同的错误。user0042 isak尝试
sum+=atoi(日期[count]-“0”);
并将得到相同的错误。@isak,如果您想要一个位数的值,您所需要的就是
sum+=date[count]“不”代码> Adoi < /COD>要求。谢谢@ USE2442,C++初学者,所以所有的帮助都是非常感谢的。但是你介意解释一下‘0’实际上是什么意思吗?因为当运行函数替换了<代码> += ATOI(日期[计数] -0′];< /C> > <代码>求和+ =日期[计数]-“0”;
它返回-32@isak这意味着您要减去字符编码的数字值(例如ASCII)对于
'0'
,从当前字符中获取相应的整数。
'0'
'9'
的字符代码保证是后续的。@user4581301罪魁祸首似乎是
计数感谢您解释问题所在,谢谢!回答得很好!非常感谢!可能只是我的编译器呃,但是编译时它会返回以下警告:
tes.cpp:6:31:警告:有符号和无符号整数表达式之间的比较[-Wsign compare]
很抱歉,这里有很多问题,新手!
#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);
}