从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者)

invalid conversion from 'int' to 'const char*' [-fpermissive]| (beginner)

当我尝试编译我的代码时弹出此错误:

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;
}

我认为您需要检查 return atoi 函数的代码,因为字符串不仅仅包含数值。 和长度 returns 字符串的大小,例如 5,但符号从 0 迭代到 4。文本[4] - 最终符号。

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;

}