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

Posted

技术标签:

【中文标题】从 \'int\' 到 \'const char*\' 的无效转换 [-fpermissive]| (初学者)【英文标题】:invalid conversion from 'int' to 'const char*' [-fpermissive]| (beginner)从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者) 【发布时间】:2021-01-21 16:04:21 【问题描述】:

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

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;

【问题讨论】:

该错误将您引导至问题所在的特定代码行。你看到了吗?检查这是养成的好习惯。 当您选择string 时,您走错了路。 (你几乎肯定想多了;你需要一个总和、一个数字和一个索引。) atoi 接受 c 字符串而不是整数。所以你不能给它喂a 随着答案的出现,我注意到一个没有人提到的关于for (int i = len; i &gt; 0; i++) 的大问题。我认为,如果您制作了一个更简单有效的程序,然后慢慢地使您的程序变得更复杂,那么您会帮自己一个大忙 询问 "一些技巧如何 [...] 让我的代码正常工作" 涵盖了许多错误,因此对于 Stack Overflow 问题来说过于宽泛。该站点打算成为一个存储库,以帮助其他有同样问题的人。为了支持这一目标,每个问题限制为一个问题。 【参考方案1】:

您的 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;

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我发现了一些问题。最明显的:

number = atoi(a);

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

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

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

sum += a - '0';

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

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

sum += stoi(a);

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

【讨论】:

【参考方案4】:

学习提取函数。这将在不转换为字符串的情况下完成您的任务。

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

【讨论】:

【参考方案5】:

有很多错误:

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

    在你的 for 循环中,你从长度开始,应该是 长度-1。

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

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

    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;


【讨论】:

【参考方案6】:

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

【讨论】:

发帖者抱怨的是编译器错误,而不是运行时问题。

以上是关于从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者)的主要内容,如果未能解决你的问题,请参考以下文章

如何从 const char* 转换为 unsigned int c++

c++关于const char*的问题

在Qt中如何将QString转换为const char*

字符串 (const char*, size_t) 到 int?

无法将字符串转换为 const char/string* 到 int*

c++ uint32 如何转 const char