Как разделить строки и передать токены в методы - PullRequest
0 голосов
/ 11 октября 2018

Для класса мне нужно взять текстовый файл и создать двоичное дерево для всех слов и строк, в которых они встречаются.У меня есть двоичное дерево, работающее для основных готовых строк, но у меня возникают проблемы с разделением слов и сообщением, на каком номере строки я нахожусь.

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

Вот как я пытаюсь это сделать,Я видел другие посты о том, как это сделать, но, честно говоря, они сейчас кажутся мне непонятными, и я бы предпочел не просто копировать то, что я не понимаю.

1 Ответ

0 голосов
/ 11 октября 2018

Используйте 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;
...