Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有重载函数的实例“;stoi“;匹配参数列表_C++_String_Visual Studio_Int - Fatal编程技术网

C++ 没有重载函数的实例“;stoi“;匹配参数列表

C++ 没有重载函数的实例“;stoi“;匹配参数列表,c++,string,visual-studio,int,C++,String,Visual Studio,Int,我试图编写一个函数,它包含4个字符,第一个和第三个字符是数字,第二个和第四个字符是运算符,该函数将第一个和第三个字符转换为整数,并根据它们之间的运算符计算输出(如果存储在第四个字符中的运算符具有更高的优先级,则不执行此操作) 这是我的尝试: #include <iostream> #include<string> using namespace std; string calculate(char ch1,char ch2,char ch3,char ch4);

我试图编写一个函数,它包含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;
}

#包括
#包括
使用名称空间std;
字符串计算(char ch1、char ch2、char ch3、char ch4);
int main(){
int i=1;
字符串输入=“4/1+1-2*2”;
弦部;
内冷;
而(1){
char cha1=输入[i-1];
char cha2=输入[i];
char cha3=输入[i+1];
char cha4=输入[i+2];
部分=计算(cha1、cha2、cha3、cha4);
如果(部分==“空”){
i+=2;
}
else{input=input.replace((i-1),3,part);}
leng=input.size();
如果(i==leng-1){
i=1;
}
}
}
字符串计算(字符ch1、字符ch2、字符ch3、字符ch4){
int-in1;
int-in3;
int结果;
弦部;
如果(ch2='-'){
如果(ch4=='*'){
部分='NULL';
}
else if(ch4=='/')){
part=“NULL”;
}
否则{
in1=stoi(ch1);
in3=stoi(ch3);
结果=in1-in3;
部分=到字符串(结果);
}
}
else if(ch2=='+'){
如果(ch4=='*'){
part=“NULL”;
}
else if(ch4=='/')){
part=“NULL”;
}
否则{
in1=stoi(ch1);
in3=stoi(ch3);
结果=in1+in3;
部分=到字符串(结果);
}
}
else if(ch2=='*'){
如果(ch4=='*'){
part=“NULL”;
}
else if(ch4=='/')){
part=“NULL”;
}
否则{
in1=stoi(ch1);
in3=stoi(ch3);
结果=in1*in3;
部分=到字符串(结果);
}
}
else if(ch2=='/')){
如果(ch4=='*'){
part=“NULL”;
}
else if(ch4=='/')){
part=“NULL”;
}
否则{
in1=stoi(ch1);
in3=stoi(ch3);
结果=in1*in3;
部分=到字符串(结果);
}
}
返回部分;
}
程序在当前状态下可能无法按预期工作,但我稍后会担心这一点,因为现在我想处理
stoi()
函数,因为对于包含此函数的每一行,我都会在标题中看到错误

我想知道我做错了什么,以及这个错误消息的确切含义是什么,以避免将来得到它


提前谢谢。

std::stoi接受std::string作为其参数,但您给它一个char

您可以通过如下方式将字符直接转换为整数:

int num = ch1 - '0';
(您可能想编写一个函数来执行此操作,并使用适当的C++样式转换)

或者,将字符转换为字符串,或者使用字符串开头

例如:

int main() {
  char ch1 = '9';
  int in1 = ch1 - '0';
  std::cout << in1 << "\n";
}
intmain(){
char ch1='9';
intin1=ch1-'0';

std::coutstd::stoi将std::string作为其参数,但您给它一个char

您可以通过如下方式将字符直接转换为整数:

int num = ch1 - '0';
(您可能想编写一个函数来执行此操作,并使用适当的C++样式转换)

或者,将字符转换为字符串,或者使用字符串开头

例如:

int main() {
  char ch1 = '9';
  int in1 = ch1 - '0';
  std::cout << in1 << "\n";
}
intmain(){
char ch1='9';
intin1=ch1-'0';

std::cout
std::stoi
需要一个
std::string
作为参数,但您给它一个
char

没有从
char
std::string
的直接转换,因此需要明确说明:

stoi(string(1, ch1));
这里
string(1,ch1)
创建一个长度
1
的字符串,该字符串只包含字符
ch1

或者,如果您确定
ch1
在该点是一个数字(
stoi
如果不是就会抛出),您可以简单地减去
'0'
,因为这些数字在字符集中的顺序是正确的:

ch1 - '0'

或者更确切地说,您可能希望将
std::string
直接传递给函数,而不是多个单独的
char
s。您可以使用成员函数从字符串中获取子字符串。

std::stoi
需要一个
std::string
作为参数,但您只给它一个
char

没有从
char
std::string
的直接转换,因此需要明确说明:

stoi(string(1, ch1));
这里
string(1,ch1)
创建一个长度
1
的字符串,该字符串只包含字符
ch1

或者,如果您确定
ch1
在该点是一个数字(
stoi
如果不是就会抛出),您可以简单地减去
'0'
,因为这些数字在字符集中的顺序是正确的:

ch1 - '0'

或者,您可能希望直接将
std::string
传递给您的函数,而不是多个单独的
char
s。您可以使用成员函数从字符串获取子字符串。

[
.substr
]当时似乎需要为一个字符做更多的工作,现在我知道得更清楚了,但第一个解决方案目前还有效,谢谢你!@TheRiser我希望你只向函数传递一个长度为4的子字符串。然后你可以通过索引访问这四个元素。既然你提到了这一点,我刚才就是这么做的,但原因之一是在其他情况下,我改为使用4个不同的字符,我想这是因为我想在
calculate
函数之外使用4个字符进行其他操作,但是,再次感谢您,这应该很方便,现在我有了