gpt4 book ai didi

c++ - 使用 C++ 读取和拆分

转载 作者:行者123 更新时间:2023-11-30 04:30:26 25 4
gpt4 key购买 nike

我用c++读了一个文件

a;aa a;1 
b;b bb;2

并使用这段代码拆分行

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
vector<string> split(string str, string separator)
{
int found;
vector<string> results;
found = str.find_first_of(separator);
while(found != string::npos) {
if(found > 0) {
results.push_back(str.substr(0,found));
}
str = str.substr(found+1);
found = str.find_first_of(separator);
}
if(str.length() > 0) {
results.push_back(str);
}
return results;
}
void lectura()
{
ifstream entrada;
string linea;
vector<string> lSeparada;
cout << "== Entrada ==" << endl;
entrada.open("entrada.in");
if ( entrada.is_open() ) {
while ( entrada.good() ) {
getline(entrada,linea);
cout << linea << endl;
lSeparada = split(linea,";");
cout << lSeparada[0] << endl;
}
entrada.close();
}
exit(0);
}

但是我在输出中得到了垃圾

== Entrada ==
a;aa a;1
a
b;b bb;2
b

b a;11?E????aa a!(GXG10F????11?GXGb bb;21F????b bb!?G1?F????2??

为什么我会得到这个垃圾?

最佳答案

您对 getline 的最后一次调用使 linea 为空。将空行作为输入,split 将返回一个空 vector (测试 length() > 0 将为 false)。尝试取消引用第一个元素 (lSeparada[0]) 然后调用未定义的行为。

可能输入文件不包含空行,但最后一次调用getline()会失败。您应该使用 while(getline(entrada,linea)) 测试 std::getline() 返回的 istream& 是否良好 而不是 while(entrada.good()) getline(entrada,linea)。这可能会解决您的问题。

关于c++ - 使用 C++ 读取和拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8702968/

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