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