首页 > 解决方案 > 如何分隔字符串并将标记传递给方法

问题描述

对于一个类,我需要获取一个文本文件并为所有单词和它们出现的行创建一个二叉树。我有用于基本预制字符串的二叉树,但我无法分隔单词并告诉我所在的行号。

    getline(MyFile, c);
    for (int i = 0; i < c.size(); i++)
    {
        if ((b.size() == 0) && ((c[i] == ',') || (c[i] == ' ') || (c[i] == '.') || (c[i] == ';') || (c[i] == '\0')));
        else
            if ((b.size() > 0) && ((c[i] == ',') || (c[i] == ' ') || (c[i] == '.') || (c[i] == ';') || (c[i] == '\0')))
            {
                K1.AddWordOrIncriment(b, LineCounter);
                b.clear();
            }
            else
                b.push_back(c[i]);
    }
    LineCounter++;

这就是我正在尝试的方式,我已经看过其他关于如何做到这一点的帖子,但老实说,它们现在似乎超出了我的理解范围,我宁愿不只是复制我不理解的东西。

标签: c++binary-search-tree

解决方案


使用 std::strtok 将具有多个分隔符的行拆分为多个字符串

string line;
getline(cin, line);

// Convert string to char* so that std::strtok could be used later
char *cstr = new char[line.length() + 1];
std::strcpy(cstr, line.c_str());
vector<string> words;

// split line into multiple strings using multiple delimiters
char* ptr = std::strtok(cstr, " -.,;");
while (ptr)
{
    string str(ptr);
    words.push_back(str);
    ptr = strtok(NULL, " -.,;");
}
delete[] cstr;

推荐阅读