gpt4 book ai didi

c++ - 尝试将字符串变量转换为 bool 结果 "true"和 "false"都等于 0

转载 作者:行者123 更新时间:2023-11-30 01:02:36 24 4
gpt4 key购买 nike

我是 C++ 的新手,我可能遗漏了一些小的东西,但我已经盯着它看太久了,非常感谢一些帮助。

我正在做一项作业,其中程序从 CSV 文件中读取数据。首先,我使用 getline() 将所有数据作为字符串导入,因为这是我知道的唯一方法。导入后,我想(正在尝试)将采用“TRUE”和“FALSE”的字符串变量转换为 bool 类型。

CSV 文件包含:

name,color,age,wild,home,endagered
Foo,brown,3,TRUE,Malaysia,FALSE

下面是我的代码。我意识到这可能效率很低,但我正在学习,所以...就是这样。

这是转换函数(它应该能够处理文件中的错误):

void stringBool(const string & temp, bool newVar)
{
const string fc = "FALSE";
const string fl = "false";
const string tc = "TRUE";
const string tl = "true";

try {
if (temp==fc || temp==fl)
{
newVar = false;
}
else if (temp==tc || temp==tl)
{
newVar = true;
}
else
{
throw temp;
}
} catch (string e) {
cout << newVar << " = " << e << " is not in the correct format. Check your file and try again." << endl;
exit(1);
}
};

这里是一个类的读入成员函数。如果重要的话,它是派生类中的虚函数。 (不想用不太相关的代码淹没帖子,但如果您想查看它,请告诉我。)

void readIn(std::string filename)
{
ifstream myFileStream(filename);

//Error if file fails to open
if(!myFileStream.is_open())
{
cout << "File failed to open" << endl;
exit(1);
}

//Temporary strings to import
string ag, wld, endg;
string myString, line;

//Read in data
getline(myFileStream, line); //Skip first line
while(getline(myFileStream, line))
{
stringstream ss(line);
getline(ss, name, ',');
getline(ss, color, ',');
getline(ss, ag, ',');
getline(ss, wld, ',');
getline(ss, home, ',');
getline(ss, endg, ',');
}
myFileStream.close();

//Convert variables from string to appropriate form
stringBool(wld, wild);
stringBool(endg, endanger);
age = stoi(ag);

//Print variables to check
cout << name << endl << color << endl << age << endl << wild << endl << home << endl << endanger << endl;

//Print temporary variables
cout << wld << endl;
cout << endg << endl;
};

当我实际调用 main 中的函数时,输出是:

Foo
brown
3
0
Malaysia
0
TRUE
FALSE

因此,即使数据已正确导入(字符串正确 - wld=TRUEendg=FALSE),wild危险为0。

如果有任何帮助,我将不胜感激。谢谢。

最佳答案

这里:

void stringBool(const string & temp, bool newVar)
{

您正在通过 newVar按值(value)。如果你想更改 newVar改变相应函数中的值,应该是引用:

void stringBool(const string & temp, bool& newVar)
{

或者,让它返回值:

bool stringBool(const std::string& temp) {
if(temp == "true" || temp == "TRUE") return true;
if(temp == "false" || temp == "FALSE") return false;
throw std::invalid_argument("Input '" + temp + "' should be either 'true' or 'false'");
}

你可以找到std::invalid_argument通过包括 <stdexcept>

关于c++ - 尝试将字符串变量转换为 bool 结果 "true"和 "false"都等于 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55754801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com