c++ - 使用 strtok() 解析文本文件

标签 c++ file parsing substr strtok

我一直在尝试编写一个程序来解析文本文件并将 6 条信息馈送到对象数组中。我的问题是我在弄清楚如何处理文本文件时遇到了问题。有人告诉我,我需要做的第一步是编写一些代码来计算每个条目有多少个字母。 txt 文件的格式如下:

"thing1","thing2","thing3","thing4","thing5","thing6"

这是我的代码的当前版本:

#include<iostream>
#include<string>
#include<fstream>
#include<cstring>

using namespace std;

int main()
{
ifstream myFile("Book List.txt");

while(myFile.good())
{
    string line;

    getline(myFile, line);

    char *sArr = new char[line.length() + 1];
    strcpy(sArr, line.c_str());

    char *sPtr;

    sPtr = strtok(sArr, " ");

    while(sPtr != NULL)
    {
        cout << strlen(sPtr) << " ";
        sPtr = strtok(NULL, " ");
    }
    cout  << endl;
}
myFile.close();
return 0;
}

所以现在有两件事让我很难过。

1) 如何处理分隔符?

2) 如何处理“跳过”每行中的第一个引号?

最佳答案

读入字符串而不是 C 风格的字符串。这意味着您可以使用方便的标准方法。

std::string::find() 方法应该可以帮助您找到要解析的每个内容。

http://www.cplusplus.com/reference/string/string/find/

您可以使用它来查找所有逗号,这将为您提供所有内容的开头。

然后您可以使用 std::string::substr() 将字符串分割成每一段。

http://www.cplusplus.com/reference/string/string/substr/

你可以通过传入比开始多 1 和比长度少 1 来摆脱引号,你也可以使用

关于c++ - 使用 strtok() 解析文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290997/

相关文章:

c++ - emplace_back 不适用于 std::vector<std::map<int, int>>

c++ - 使用 OpenCV 和 C++ 进行激光检测

algorithm - 一次读取、处理和写入一行是否高效?

c++ - 结构到文件然后再返回

python - 从纯文本中解析 URL

c++ - 如何按值将不可复制的可移动对象作为 const 返回并存储它?

c - 如何在不使用 C 中的 "dirent.h"(visual studio 2017 windows)的情况下查找特定目录中的所有文件名

java - 将 Java 中的字符串转换为整数

php - PHP中如何解析<a>标签的属性值

c++ - 自动调用 C++ 基类方法