正在尝试在指针类型c++中查找子字符串

Trying to find a substring in a pointer type c++

本文关键字:查找 字符串 c++ 类型 指针      更新时间:2023-10-16

在我学习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).rfindsomething->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;