如何分隔字符串并将令牌传递给方法

时间:2018-10-11 08:52:51

标签: c++ binary-search-tree

对于一个班级,我需要获取一个文本文件,并为所有单词及其上出现的行制作一个二叉树。我的二叉树可以处理基本的预制字符串,但是我很难界定单词并告诉我所在的行号。

    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++;

这就是我正在尝试的方式,我已经看过其他有关实现方法的帖子,但是老实说,它们似乎超出了我的理解范围,我宁愿不只是复制一些我不理解的内容。 / p>

1 个答案:

答案 0 :(得分:2)

使用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;