phrase.erase(remove_if(phrase.begin(),phrase.end(),:: isdigit),phrase.end());在上面的代码中,为什么我必须使用::尽管我使用了命名空间std?
该 :: 表示您正在使用 isdigit 以及来自全局命名空间的其他人。该 isdigit 是其他头文件的一部分,例如 <ctype.h> 。
::
isdigit
<ctype.h>
有多个 isdigit , ispunct ,和 isspace 函数 - 在全局命名空间中的函数 <ctype.h> 标题,以及几个 std 中的命名空间 <cctype> 和 <clocale> 头。用它们作为前缀 :: 你想要使用全局命名空间中的那些。
ispunct
isspace
std
<cctype>
<clocale>
你需要使用 <string> 代替 <string.h> 为了使用 std::string 类。
<string>
<string.h>
std::string
假设 test 是一个 Palindrome 对象,然后 test.Palindrome::isPalindrome() 应该是公正的 test.isPalindrome() 。
test
Palindrome
test.Palindrome::isPalindrome()
test.isPalindrome()
如果你省略了 Palindrome 构造函数,然后是 phrase 成员仍然是空白,你的 isPalindrome() 实施回报 true 一片空白 phrase ( length 是0)因为什么都没有 for 循环检查。这在技术上是正确的 - 空白字符串是回文。
phrase
isPalindrome()
true
length
for