gpt4 book ai didi

C++ 读取文件 token

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:10 25 4
gpt4 key购买 nike

另一个请求抱歉..现在我正在一个一个地阅读标记并且它有效,但我想知道什么时候有一个新行..

如果我的文件包含

Hey Bob
Now

应该给我

Hey
Bob
[NEW LINE]
NOW

有没有办法不使用 getline 来做到这一点?

最佳答案

Yes the operator>> 与字符串一起使用时读取“空格”分隔的单词。 “空白”包括空格制表符和换行符。

如果您想一次读取一行,请使用 std::getline()
然后可以使用字符串流单独标记该行。

std::string   line;
while(std::getline(std::cin,line))
{

// If you then want to tokenize the line use a string stream:

std::stringstream lineStream(line);
std::string token;
while(lineStream >> token)
{
std::cout << "Token(" << token << ")\n";
}

std::cout << "New Line Detected\n";
}

小补充:

不使用 getline()

所以您确实希望能够检测换行符。这意味着换行符成为另一种类型的标记。因此,让我们假设您有以“空格”分隔的单词作为标记,以换行符作为其自身的标记。

然后就可以创建一个Token类型了。
然后你所要做的就是为一个 token 编写流操作符:

#include <iostream>
#include <fstream>

class Token
{
private:
friend std::ostream& operator<<(std::ostream&,Token const&);
friend std::istream& operator>>(std::istream&,Token&);
std::string value;
};
std::istream& operator>>(std::istream& str,Token& data)
{
// Check to make sure the stream is OK.
if (!str)
{ return str;
}

char x;
// Drop leading space
do
{
x = str.get();
}
while(str && isspace(x) && (x != '\n'));

// If the stream is done. exit now.
if (!str)
{
return str;
}

// We have skipped all white space up to the
// start of the first token. We can now modify data.
data.value ="";

// If the token is a '\n' We are finished.
if (x == '\n')
{ data.value = "\n";
return str;
}

// Otherwise read the next token in.
str.unget();
str >> data.value;

return str;
}
std::ostream& operator<<(std::ostream& str,Token const& data)
{
return str << data.value;
}


int main()
{
std::ifstream f("PLOP");
Token x;

while(f >> x)
{
std::cout << "Token(" << x << ")\n";
}
}

关于C++ 读取文件 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/275355/

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