【发布时间】:2020-08-13 03:31:21
【问题描述】:
我正在研究一个二叉搜索树,它从文本文件中读取,将单词更改为小写,删除标点符号并检查单词是否有效,然后存储到二叉搜索树中。
在这里,我创建了一个名为isValidWord() 的函数,用于检查单词是否为小写、是否包含任何数字以及是否包含任何标点符号。但是由于某种原因,它仍然允许将无效的单词存储到二叉搜索树中。
isValidWord() 函数
bool BST::isValidWord(string word) {
for (int i = 0; word.size(); i++)
{
if (!isalnum(word[i]))
{
if (!isdigit(word[i])) {
if (!ispunct(word[i])) {
if (!isupper(word[i])) {
return true;
}
}
}
}
}
return false;
}
BST 插入功能
void BST::insert(string word, TreeNode*& root) {
transform(word.begin(), word.end(), word.begin(), ::tolower);
for (int i = 0, len = word.size(); i < len; i++) {
if (ispunct(word[i])) {
word.erase(i--, 1);
len = word.size();
}
}
if (isValidWord(word)) {
if (root == NULL) {
root = new TreeNode(word);
}
else if (root->data == word) {
root->count++;
}
else {
if (word >= root->data) {
insert(word, root->right);
}
if (word <= root->data) {
insert(word, root->left);
}
}
}
}
我做错了什么我看不到吗?任何帮助将不胜感激。
【问题讨论】:
-
最终,循环访问
word[word.size()],这是一个空字符'\0'。该字符通过了所有四项检查(不是字母、不是数字,也不是标点符号),函数返回true。return false;语句永远无法到达。
标签: c++ function binary-search-tree