c++ - 如何分隔字符串并将标记传递给方法
问题描述
对于一个类,我需要获取一个文本文件并为所有单词和它们出现的行创建一个二叉树。我有用于基本预制字符串的二叉树,但我无法分隔单词并告诉我所在的行号。
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++;
这就是我正在尝试的方式,我已经看过其他关于如何做到这一点的帖子,但老实说,它们现在似乎超出了我的理解范围,我宁愿不只是复制我不理解的东西。
解决方案
使用 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;
推荐阅读
- javascript - 字符串操作:我不明白在这个编码挑战中使用 str.length-1
- php - 无法在刀片文件中显示分页链接 - Laravel Livewire
- c - EXECVP系统调用是否支持IO重定向
- sed - grep 到终端的所有 Gentoo Stage3 链接
- excel - VBA中列的总和
- javascript - 当网站不安全时是否可以触发 javascript 警报?
- javascript - 如何在javascript中的模板文字内调用onclick事件
- python - Pandas:如何使用列和条件来获得特定的 json?
- azure - 这个 Github Action 如何修改 deployment.yml 文件
- c# - 无法使用 Webhook 执行 Discord Bot 命令