如何解决从“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;
}
,
有不少错误:
-
从将 '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;
}
,
您的 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] - 最终符号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。