ни один экземпляр перегруженной функции "stoi" не соответствует списку аргументов - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь написать функцию, которая принимает 4 символа, причем первый и третий символы являются числами, а второй и четвертый символы являются операторами, функция преобразует первый и третий символы в целые числа и вычисляет вывод на основе оператора между ними (или не делает этого, если оператор, сохраненный в четвертом символе, имеет более высокий приоритет).

Это моя попытка:

#include <iostream>
#include<string>



using namespace std;

string calculate(char ch1,char ch2,char ch3,char ch4);


int main() {
    int i = 1;
    string input = "4/1+1-2*2" ;
    string part;
    int leng;
    while(1){

        char cha1 = input[i - 1];
        char cha2 = input[i];
        char cha3 = input[i + 1];
        char cha4 = input[i + 2];
        part = calculate(cha1,cha2,cha3,cha4);
        if (part == "NULL") {
            i += 2;
}
        else{ input = input.replace((i-1),3,part); }
        leng = input.size();
        if (i == leng - 1) {
            i = 1;
        }
    }





}

string calculate(char ch1, char ch2, char ch3, char ch4){
    int in1;
    int in3;
    int result;
    string part;


    if (ch2 == '-') {
        if (ch4 == '*') {
            part = 'NULL';



        }
        else if (ch4 == '/') {
            part = "NULL";
        }
        else {
            in1 = stoi(ch1);
            in3 = stoi(ch3);
            result = in1 - in3;


            part = to_string(result);
        }

    }

    else if (ch2 == '+') {
        if (ch4 == '*') {
            part = "NULL";
        }
        else if (ch4 == '/') {
            part = "NULL";
        }
        else {
            in1 = stoi(ch1);
            in3 = stoi(ch3);
            result = in1 + in3;

            part = to_string(result);

        }
    }


    else if (ch2 == '*') {
        if (ch4 == '*') {
            part = "NULL";
        }
        else if (ch4 == '/') {
            part = "NULL";
        }
        else {
            in1 = stoi(ch1);
            in3 = stoi(ch3);
            result = in1 * in3;

            part = to_string(result);
        }
    }

    else if (ch2 == '/') {
        if (ch4 == '*') {
            part = "NULL";
        }
        else if (ch4 == '/') {
            part = "NULL";
        }
        else {
            in1 = stoi(ch1);
            in3 = stoi(ch3);
            result = in1 * in3;


            part = to_string(result);

        }
    }



    return part;
}

Программа вероятно, не будет работать должным образом в его текущем состоянии, но я буду беспокоиться об этом позже, а сейчас я хочу иметь дело с функцией stoi(), потому что для каждой строки, содержащей эту функцию, я получаю ошибку в заголовке .

Я хочу знать, что я делаю неправильно, и что именно означает это сообщение об ошибке, чтобы избежать его получения в будущем.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

std::stoi ожидает std::string в качестве аргумента, но вы даете ему один char.

Прямого преобразования из char в std::string нет, поэтому вам необходимо явно об этом:

stoi(string(1, ch1));

Здесь string(1, ch1) создает строку длиной 1, содержащую только символ ch1.

В качестве альтернативы, если вы уверены, что ch1 ди git в этой точке (stoi будет бросать, если это не так), вы можете просто вычесть '0', так как цифры гарантированно будут правильно упорядочены в наборе символов:

ch1 - '0'

Или, скорее, вы хотите передать std::string непосредственно в вашу функцию вместо нескольких отдельных char s. Вы можете использовать функцию-член .substr для получения подстрок из строки.

1 голос
/ 01 марта 2020

std :: stoi принимает аргумент std :: string в качестве аргумента, но вы предоставляете ему символ.

Вы можете напрямую преобразовывать символы в целые числа через приведение типа:

int num = ch1 - '0';

(Вы можете написать функцию для этого и использовать правильные приведения в стиле c ++)

Или преобразовать символ в строку или использовать строки для начала с

Пример :

int main() {
  char ch1 = '9';
  int in1 = ch1 - '0';
  std::cout << in1 << "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...