来自' char'的无效转换到#char; char *' [-fpermissive] str :: atoi(String to Integer)

时间:2017-09-21 06:05:04

标签: c++ string atoi

我有一个代码,我以字符串格式输入数字(逗号分隔)。我应该将输入字符串转换为整数。我使用

完成了它
digit[k] = (digit[k]*10)+std::atoi(line[i]);

但我得到的错误是

jdoodle.cpp: In function 'int main()':
jdoodle.cpp:28:54: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
             digit[k] = (digit[k]*10)+std::atoi(line[i]);

完整的程序

#include <iostream>
#include<cstdlib>

using namespace std;

int main() {
char line[1024];
    int digit[1024],two[1024],k=0,m=0,temp1=0,avg=0;

    for(int i=0;i<1024;i++)
    {
        digit[i]=0;
    }

    cout << "Enter a line of string: ";
    cin.getline(line, 1024);
    for(int i = 0; line[i]!='\0'; ++i)
    {

        if((line[i]>='a'&& line[i]<='z') || (line[i]>='A'&& line[i]<='Z'))
        {

            cout<<"\nInvalid input";
            return 0;
        }
        else if(line[i]>='0' && line[i]<='9')
        {
            digit[k] = (digit[k]*10)+std::atoi(line[i]);
            //++digits;
        }
        else if (line[i]==',')
        {
            k=k+1;
        }
    }
    for(int j=0;digit[j]!='\0';j++)
    {
        int temp=digit[j];
        while(temp!=0)
        {

            temp=temp/10;
            count=count+1;

        }

        if(count==2)
        {
            two[m]=digit[j];
            m=m+1;
            count=0;
        }
    }
    for(int i=0;two[i]!='\0';i++)
    {
        total = total+two[i];
        temp1=i;
    }
    avg=total/temp1;

    cout << avg;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

atoi的原型:

int atoi (const char * str);

source

在这里,您可以看到atoi需要字符串文字,而不是单个字符。您可以更改代码

digit[k] = (digit[k]*10)+std::atoi(line[i]);

进入

digit[k] = (digit[k]*10)+(line[0] - '0');

修复此错误。这样做基本上是将你的单个字符转换为int,而不使用atoi