gpt4 book ai didi

c++ - 文本文档中的换行符?

转载 作者:行者123 更新时间:2023-11-28 01:09:29 24 4
gpt4 key购买 nike

我写了一个非常简单的函数来读取可能的玩家名称并将它们存储在 map 中供以后使用。基本上在文件中,每一行都是一个新的可能的玩家名字,但出于某种原因,除了姓氏之外,似乎所有的名字后面都有一些不可见的换行符。我的打印输出是这样显示的...

nameLine = Georgio

Name: Georgio
0
nameLine = TestPlayer

Name: TestPlayer 0

这是实际的代码。我想我需要剥离一些东西,但我不确定我需要检查什么。

bool PlayerManager::ParsePlayerNames()
{
FileHandle_t file;
file = filesystem->Open("names.txt", "r", "MOD");

if(file)
{
int size = filesystem->Size(file);
char *line = new char[size + 1];

while(!filesystem->EndOfFile(file))
{
char *nameLine = filesystem->ReadLine(line, size, file);

if(strcmp(nameLine, "") != 0)
{
Msg("nameLine = %s\n", nameLine);
g_PlayerNames.insert(std::pair<char*, int>(nameLine, 0));
}

for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); ++it)
{
Msg("Name: %s %d\n", it->first, it->second);
}
}

return true;
}

Msg("[PlayerManager] Failed to find the Player Names File (names.txt)\n");
filesystem->Close(file);
return false;
}

最佳答案

您确实需要考虑使用 iostream 和 std::string。如果您使用可用的 C++ 结构,上面的代码会简单得多。

你的代码有问题:

  1. 为什么要为文件大小的一行分配缓冲区?
  2. 你没有清理这个缓冲区!
  3. 如何ReadLine填写line缓冲区?
  4. 大概是nameLine指向 line开始缓冲区,如果是,在 std::map 中给出,关键是一个指针 ( char* ) 而不是你期望的字符串,指针是一样的!如果不同(即您以某种方式读取一行,然后为每个名称移动指针,则 std::map 将包含每个玩家的条目,但是您将无法通过玩家名称找到条目,因为比较将是指针比较而不是您期望的字符串比较!

我建议您考虑使用 iostreams 实现它,这里是一些示例代码(未经任何测试)

ifstream fin("names.txt");
std::string line;
while (fin.good())
{
std::getline(fin, line); // automatically drops the new line character!
if (!line.empty())
{
g_PlayerNames.insert(std::pair<std::string, int>(line, 0));
}
}
// now do what you need to
}

无需进行任何手动内存管理,并且std::map键入 std::string !

关于c++ - 文本文档中的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143416/

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