从“int”到“const char*”的无效转换[-fpermissive]| 初学者

问题描述

当我尝试编译我的代码时会弹出这个错误:

invalid conversion from 'int' to 'const char*'

我的任务是编写一个程序,计算具有奇数索引的数字之和。

请不要烤我(我正在学习如何用 C++ 编写代码),并提供一些如何修复它并使我的代码正常工作的技巧。

#include <bits/stdc++.h>
#include <cmath>
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string text;
    cin >> text;

    int len = text.length(),sum = 0,number = 0,a = 0;

    for (int i = len; i > 0; i++) {
        a = text[i];
        if (i % 2 == 1) {
            number = atoi(a);
            sum = sum + number;
        }
    }
    cout << sum;

    return 0;
}

解决方法

atoi 是将字符串转换为整数的函数,但 a 是字符而不是字符串。这就是您出错的原因。

atoi(a); 替换为 a - '0'。这是一个将数字字符转换为其整数值的公式。

,

我看到了一些问题。最明显的:

number = atoi(a);

atoi 需要一个 const char *,但 a 是一个 int。

请注意,如果您列出了哪一行会产生错误消息,这会有所帮助。

无需尝试,我认为您可以摆脱 atoi() 并执行以下操作:

sum += a - '0';

另一种选择是将 a 变成字符串并使用 text.subst() 来获取单个字符,然后您可以这样做:

sum += atoi (a.c_str());

sum += stoi(a);

在编程中,总是有十几种方法可以做同样的事情。

,

学习提取函数。这将完成您的任务,而无需转换为字符串。

int sumOfDigitsInEvenPos(int x,int base = 10) {
    x = std::abs(x);
    int sum = 0;
    while (x) {
       sum += x % base;
       x /= base * base;
    }
    return sum;
}
,

有不少错误:

  1. 从将 'a' 声明为 int 开始。

  2. 在你的 for 循环中,你的长度应该是 长度-1。

  3. 再次在 for 循环中使用 i++,它应该是 i-- 或以 i=0 开头;

  4. 当你得到数字时为什么你把字符串作为输入 取 int/long 应该更方便。

  5. atoi 接受 char * 而不是 int

试试下面的代码,它应该可以解决你的问题

#include <bits/stdc++.h>
#include <cmath>
#include <string>
#include <iostream>

using namespace std;

int main()
{
string text;
cin>>text;

int len= text.length();
cout<<len<<endl;
int sum=0,number=0;
char a;


for(int i=len-1;i>0;i--)
{
     a=text[i];
    if(i%2==1)
    {   number= (int)a;
        sum = sum+number;
    }

}
cout<<sum;

return 0;

}
,

您的 for 循环不正确,因为在第一次尝试时它从超出范围的索引开始并进一步增加。这里:

#include <iostream>

using namespace std;

int main()
{
    string text;
    cin >> text;

    int len = text.length(),sum = 0,number = 0,a = 0;

    for (int i = 0; i < len; i++) {
       a = text[i];
       if (i % 2 == 1) {
            number = a - '0';
            sum = sum + number;
        }
    }
    cout << sum;

    return 0;

}

,

我认为您需要检查 atoi 函数的返回码,因为字符串不仅包含数值。 length 返回字符串的大小,例如 5,但符号从 0 到 4 迭代。 text[4] - 最终符号。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...