C++ 对stof的调用没有匹配的函数

C++ 对stof的调用没有匹配的函数,c++,C++,尝试获取字符串中的值,并将其保存在向量中,并在给定“q”作为输入时停止。然后复制浮点类型的其他向量中的值并打印其值。 但无法将字符串更改为float,并且显示错误。我正在使用stof()来执行此操作 #include <iostream> #include <vector> #include <string> using namespace std; int main(){ string addDigit; vector<string

尝试获取字符串中的值,并将其保存在向量中,并在给定“q”作为输入时停止。然后复制浮点类型的其他向量中的值并打印其值。 但无法将字符串更改为float,并且显示错误。我正在使用stof()来执行此操作

#include <iostream>
#include <vector>
#include <string> 

using namespace std;
int main(){
    string addDigit;
    vector<string> values;
    vector<float> number;
    while (cin >> addDigit) {
        if (addDigit == 'q') {
            break;
        }
        else {
            values.push_back(addDigit);
        }
    }
    int size=values.size();
    for (int i = 0; i < size; ++i) {
        float num=std::stof(values[i]);
        number.push_back(num);
    }
    for (int i = 0; i < size; ++i) {
       std::cout<<number[i];
    }

    cout << "\n" << endl;

    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串加数字;
向量值;
向量数;
而(cin>>添加数字){
如果(addDigit=='q'){
打破
}
否则{
值。向后推_(addDigit);
}
}
int size=values.size();
对于(int i=0;istd::coutstof函数接受std::string并将其转换为浮点数,但您提供的单个字符不能转换为std::string

还有另一个函数atof,它更接近您所期望的,但它使用一个指向以0结尾的字符数组的指针,而您也没有该数组


要将单个字符转换为相应的十进制值,只需输入[i]-“0”,因为ASCII代码中的字符的排列方式是,例如,字母“5”距离字母“0”有5个位置。

stof函数获取std::string并将其转换为浮点数,但您给出的单个字符不能转换为std::string

还有另一个函数atof,它更接近您所期望的,但它使用一个指向以0结尾的字符数组的指针,而您也没有该数组


要将单个字符转换为相应的十进制值,只需将[i]-“0”设置为值,因为ASCII代码中的字符的排列方式是,例如,字母“5”与字母“0”相距5个位置。

您需要做几件事来修复代码,请记住以下几点:

  • 您正在使用
    stof()
    进行比较,并且stof将S字符串TOF转换为loat,因此您将无法像现在这样为其提供字符

  • 在将输入值保存到浮点向量之前,最好先检查输入值是否是一个数字

要解决上述两个问题,实际上可以使用
cin.good()提供的验证
,这也将清理代码。如果提供的输入可以存储到浮点型变量
number
,则
while
循环将数字添加到向量
number
中,并请求另一个输入。要退出循环,只需输入不能存储到
float
中的任何内容。可以吗r字母“q”也是

#包括
#包括
使用名称空间std;
int main()
{
向量数;
浮点数;
cin>>数量;
while(cin.good())
{
数字。推回(数字);
cin>>数量;
}
用于(自动i:数字)

您需要做几件事来修复代码,请记住以下几点:

  • 您正在使用
    stof()
    进行比较,并且stof将S字符串TOF转换为loat,因此您将无法像现在这样为其提供字符

  • 在将输入值保存到浮点向量之前,最好先检查输入值是否是一个数字

要解决上述两个问题,实际上可以使用
cin.good()提供的验证
,这也将清理代码。如果提供的输入可以存储到浮点型变量
number
,则
while
循环将数字添加到向量
number
中,并请求另一个输入。要退出循环,只需输入不能存储到
float
中的任何内容。可以吗r字母“q”也是

#包括
#包括
使用名称空间std;
int main()
{
向量数;
浮点数;
cin>>数量;
while(cin.good())
{
数字。推回(数字);
cin>>数量;
}
用于(自动i:数字)

不能“但不能将字符串更改为浮点并且它显示错误”-错误是什么?你会让医生诊断你,而不告诉他们伤害的细节吗?
values
是一个字符向量。
values[i]
是单个字符。
std::stof
需要一个字符串。字符串和字符是两个完全不同的东西。字符向量也不是字符串。如果需要字符串,请将其拼写为
std::string
@StoryTeller UnslanderMonica,位于顶部“调用stof时没有匹配函数”“我们都很清楚这并不是全部错误消息。我不知道您在尝试做什么。将一个数字转换为浮点数对我来说似乎不合理。”但无法将字符串更改为浮点,因此显示错误”-错误是什么?你会让医生诊断你而不告诉他们伤害的细节吗?
values
是一个字符向量。
values[i]
是单个字符。
std::stof
需要一个字符串。字符串和字符是两个完全不同的东西。字符向量也不是字符串。如果需要字符串,请将其拼写为
std::string
@StoryTeller UnslanderMonica,位于顶部“调用stof时没有匹配函数”"我们都很清楚这不是全部的错误信息。我不知道你想做什么。对我来说,将一个数字转换为浮点数似乎不合理。好的,希瓦姆,问题现在更清楚了,那么你有了更好的解决方案。我已经更新了我的答案,这样你就可以看到伊托克,希瓦姆,问题更清楚了现在,你有了一个更好的解决方案