gpt4 book ai didi

c++ - 换行符后停止读取文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:12 26 4
gpt4 key购买 nike

我正在尝试创建垃圾邮件过滤器。我需要先训练模型。我从一个文本文件中读取单词,该文本文件的第一个单词是“垃圾邮件”或“火腿”,然后是邮件中的单词及其出现的次数。文件中有段落。我的程序能够读取第一段,即单词及其出现次数。

问题是,文件在遇到换行符后停止读取,并且不读取下一段。尽管我感觉我检查段落末尾的换行符的方式并不完全正确。

我已经给出了两段,所以你只需要了解火车文本的概念。训练文本文件。

/000/003 ham 需要 1 fw 1 35 2 39 1 感谢 1 线程 2 40 1 拷贝 1 else 1 相关器 1 under 1 公司 1 25 1 he 2 26 2 168 1 29 2 content 4 1 1 6 1 5 1 4 1 review 2 we 1 john 3 17 1 use 1 15 1 20 1 classes 1 may 1 a 1 back 1 l 1 01 1 produced 1 i 1 yes 1 10 2 713 2 v6 1 p 1 原创 2

/000/031 ham don 1 kim 5 dave 1 39 1 customer 1 38 2 thanks 1 over 1 thread 2 year 1 correlator 1 under 1 williams 1 mon 2 number 2 kitchen 1 168 1 29 1 content 4 3 2 2 6 system 2 1 2 7 1 6 1 5 2 4 1 9 1 each 1 8 1 view 2

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
int V = 0; // Total number of words

ifstream fin;
fin.open("train", ios::in);
string word;
int wordnum;
int N[2] = {0};
char c, skip;
for (int i = 0; i < 8; i++) fin >> skip; // There are 8 characters before the first word of the paragraph
while (!fin.fail())
{
fin >> word;
if (word == "spam") N[0]++;
else if (word == "ham") N[1]++;
else
{
V++;
fin >> wordnum;
}
int p = fin.tellg();
fin >> c; //To check for newline. If its there, we skip the first eight characters of the new paragraph because those characters aren't supposed to be read
if (c == '\n')
{
for (int i = 0; i < 8; i++) fin >> skip;
}
else fin.seekg(p);
}

cout << "\nSpam: " << N[0];
cout << "\nHam :" << N[1];
cout << "\nVocab: " << V;

fin.close();

return 0;
}

最佳答案

std::ifstream::operator>>() 没有读取变量中的 \n;它掉落了它。如果您需要使用空格和 \n 符号进行操作,您可以使用 std::ifstream::get()

关于c++ - 换行符后停止读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044817/

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