从 '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;
}
错误不少:
首先将 '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;
}
当我尝试编译我的代码时弹出此错误:
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;
}
错误不少:
首先将 '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;
}