从 '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 > 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++
字符串 (const char*, size_t) 到 int?