gpt4 book ai didi

c++ - 如何更改此标记化过程以处理多行文本文件?

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

我正在处理这个源代码:

#include <string>
#include <vector>
#include <iostream>
#include <istream>
#include <ostream>
#include <iterator>
#include <sstream>
#include <algorithm>

int main()
{
std::string str = "The quick brown fox";

// construct a stream from the string
std::stringstream strstr(str);

// use stream iterators to copy the stream to the vector as whitespace separated strings
std::istream_iterator<std::string> it(strstr);
std::istream_iterator<std::string> end;
std::vector<std::string> results(it, end);

// send the vector to stdout.
std::ostream_iterator<std::string> oit(std::cout);
std::copy(results.begin(), results.end(), oit);
}

为了,它不是标记单行并将其放入 vector 结果中,而是标记从此文本文件中提取的一组行并将生成的单词放入单个 vector 中。

Text File:
Munroe states there is no particular meaning to the name and it is simply a four-letter word without a phonetic pronunciation, something he describes as "a treasured and carefully-guarded point in the space of four-character strings." The subjects of the comics themselves vary. Some are statements on life and love (some love strips are simply art with poetry), and some are mathematical or scientific in-jokes.

到目前为止,我只清楚我需要使用

while (getline(streamOfText, readTextLine)){} 

让循环运行。

但我认为这行不通:

while (getline(streamOfText, readTextLine)) { cout << readTextLine << endl;

//从字符串构造一个流 std::stringstream strstr(readTextLine);

//使用流迭代器将流作为空格分隔的字符串复制到 vector 中 std::istream_iterator 它(strstr); std::istream_iterator 结束; std::vector results(it, end);

/*HOw CAN I MAKE THIS INSIDE THE LOOP WITHOUT RE-DECLARING AND USING THE CONSTRUCTORS FOR THE ITERATORS AND VECTOR? */

// send the vector to stdout.
std::ostream_iterator<std::string> oit(std::cout);
std::copy(results.begin(), results.end(), oit);

}

最佳答案

是的,那么您在readTextLine 中有一整行。这就是你在那个循环中想要的吗?然后不是从 istream 迭代器构造 vector ,而是复制到 vector 中,并在循环外定义 vector :

std::vector<std::string> results;
while (getline(streamOfText, readTextLine)){
std::istringstream strstr(readTextLine);
std::istream_iterator<std::string> it(strstr), end;
std::copy(it, end, std::back_inserter(results));
}

如果您只需要流中的所有单词,而不需要逐行处理,那么您实际上不需要先将一行读入字符串。就像您在代码中所做的那样,直接从另一个流中读取。它不仅会从一行中读取单词,还会从整个流中读取单词,直到文件结尾:

std::istream_iterator<std::string> it(streamOfText), end;
std::vector<std::string> results(it, end);

要像您在评论中要求的那样手动完成所有操作,请执行

std::istream_iterator<std::string> it(streamOfText), end;
while(it != end) results.push_back(*it++);

我建议你读一本这方面的好书。我认为它将向您展示更多有用的技术。 C++ Standard library Josuttis 是一本好书。

关于c++ - 如何更改此标记化过程以处理多行文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/485371/

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