正在尝试在指针类型c++中查找子字符串
Trying to find a substring in a pointer type c++
在我学习c++的过程中,我遇到了一个有趣的情况,我想不出任何方法来修复它
我尝试创建一个带有指针符号的字符串类型(在添加了"using std::string;"之后)
但是当我在里面输入了一个值之后,试图在里面找到一些东西时,它给了我一个错误,必须是类类型的
示例:
string *something = new string("Something stringy - std::string");
在那个字符串中,我试着搜索子字符串"str"
尝试使用此命令时:
cout << "The first occurrence of the substring 'str' in something starts at index " << *something.rfind("str", std::distance(begin(*something), end(*something))) << endl << endl << endl;
这样做的正确方法是什么?
点运算符优先于解引用运算符:您要做的操作相当于*(something.rfind(...))
。由于something
有一个指针类型而不是类类型,所以它没有点运算符,并且会得到一个错误。
您可以使用(*something).rfind
或something->rfind
,后者更短更常见。对于指针,->
运算符等效于.
运算符。
这里有一些问题。
第一个是运算符优先级。考虑代码*something.rfind("str")
。.
运算符的优先级高于*
运算符,因此此代码等效于*(something.rfind("str"))
,但我们不能直接调用指针上的成员函数。我们可以通过用括号包围取消引用来强制它首先发生,或者更直接地,通过使用->
运算符,即something->rfind("str")
来解决这个问题。
第二个问题是rfind
从字符串的末尾开始搜索,所以它会找到您要查找的子字符串的最后一个,而不是第一个。如果要查找第一次出现,请使用find
。以下是一些关于std::string
的文档,解释了find
的不同变体。
最后的问题是find
的第二个自变量是开始搜索的位置。正如所写的那样,起始位置将等于字符串的长度,因此没有什么可搜索的。相反,要从字符串的前面开始搜索,请使用默认值0。
最终解决方案:
cout << "The first occurrence of the substring 'str' in something starts at index "
<< something -> find("str")
<< endl
<< endl
<< endl;
- 使用正则表达式regex_search在字符串中查找字符串
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 在 c++ 中查找字符串中没有循环的数字总和
- 查找字符串可以减少到 0 的步骤数
- C++ 查找字符串中存在的元素向量
- 查找字符串中最常见的字母
- C++使用旧编译器GCC 4.4.0在结构列表中查找字符串
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 如何使用字符串流查找字符串中的整数总和?
- 穿过链接列表以查找字符串
- 查找字符串中存在的不同字符
- 如何使用 std::find 从向量的第一个元素中查找字符串<字符串对<字符串、字符串> >类型?
- 如何从C++的输入中查找字符串并将其替换为另一个字符串
- C++在多个字符串中查找字符串
- 使用std :: quare_range查找字符串向量中发生的前缀范围
- 在字符串列表中查找字符串,然后将字符串设置为找到的字符串?
- 尝试在类的向量中查找字符串
- 是否有一种算法可以查找字符串中任何指定字符的第一次出现
- 在.txt中查找字符串并获取C++中的行内容
- 如何在考虑标点符号的同时在文件中查找字符串