gpt4 book ai didi

c++ - 将字符串与 ifstream::getline 生成的字符串进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:07 26 4
gpt4 key购买 nike

我正在做一个项目,我需要从文件中读取后记和解析数据以在我的程序中使用。我正在研究一个函数,通过确保后记具有开始和结束定界符来测试后记是否有效。

下面是我为实现此目的而编写的代码段。我相信在 postscript 文件中没有额外的空格或任何类似的东西会导致 delimitStr 和 lineStr 之间的任何差异。我还尝试将 delimitStr 设置为“%%%BEGIN\0”和“%%%BEGIN”,但比较无效。

string lineStr;
bool beginFlag = false; //Switches to true when begin statement in postscript is found
string delimitStr = "%%%BEGIN"; //Starts as opening delimiter. Switches to closing when opening is found.
while(psfile) {
getline(psfile, lineStr);
if(!beginFlag && lineStr == delimitStr) {
beginFlag = true;
delimitStr = "%%%END";
cerr << "Begin found." << endl;
}
else if(beginFlag && lineStr == delimitStr)
return true; //Only return true if file has beginning and ending delimiters.

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

最佳答案

delimitStr 更改为 delimitStr = "%%%BEGIN"; 因为 getline 丢弃了 '\n'和像这样比较字符串 lineStr == delimitStr。不要将字符串与 c_str() 进行比较,因为它会返回一个 const char*

显示差异的示例:

std::string s1("%%%BEGIN");
std::string s2("%%%BEGIN\n");
std::string s3("%%%BEGIN\0"); // Same as s1 because std::string stops at '\0'

std::cout << std::boolalpha << (s1 == s2) << '\n'; // Outputs: false
std::cout << (s1 == s3) << '\n'; // Outputs: true
std::cout << (s2 == s3) << std::endl; // Outputs: false

关于c++ - 将字符串与 ifstream::getline 生成的字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982054/

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