【发布时间】:2020-07-25 05:44:26
【问题描述】:
我接到了一项编程任务,其中涉及删除字符串中的某些字母。当我找到公共成员函数字符串 find 时,我正在尝试不同的方法来做到这一点。简而言之,我正在通过这个程序测试该功能:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string Word = "Applejuice";
cout<<Word.find("e")<<endl;
return 0;
}
因此,当我输入诸如“e”之类的字母时,我得到了数字 4,这让我感到困惑,因为我认为该函数会计算该特定单词中的所有字母,例如苹果汁。此外,当我使用该单词中未使用的字母时,我会得到像 18446744073709551615 这样的数字,例如当我在上面的代码中输入 X 时。
有人能解释一下为什么会这样吗?
【问题讨论】:
-
find()返回它找到的第一个匹配项的索引。因此,在您的情况下,它会返回"Apple"中第一个'e'的索引,即4(请记住,C++ 中的索引是从零开始的,因此'Apple'中的'A'的索引是0)。将来,请尝试阅读有关您使用的函数的文档,而不是假设您知道它们的作用 - 这次您的假设完全错误。 -
那么我该如何做才能计算某个字母在一个单词中出现的次数?什么时候溢出?
-
find()不计算找到它正在搜索的内容的次数。它只返回它找到的第一个索引(或string::npos,如果没有找到)。如果您想计算字符串出现的次数,find()- 至少就其本身而言 - 不是解决方案,因为它不计算。如果您想为此目的使用find(),则需要实现逻辑(例如重复调用find()的循环)。 -
@Mactin "那么我该如何做才能计算某个字母在一个单词中出现的次数?" - 你可以使用
std::count().