获取指针的子字符串

时间:2013-10-02 05:45:45

标签: c++ string pointers

我有一个函数,它将一个指向字符串的指针作为参数。我想找到该字符串的子字符串,但我尝试使用use *str.substr()但它说我正在尝试调用成员函数substr()str不是类{{} 1}}我该怎么办?

std:string*

以上是代码的gyst。

2 个答案:

答案 0 :(得分:3)

您正在考虑运算符优先级规则,这意味着您的代码将被读取为

*(str.substring(int, int));

您可以使用指针取消引用运算符->

str->substring(a, b);

或使用括号明确表达您想要的内容

(*str).substring(int, int);

除非参数可以为null,否则更简单的解决方案是传递引用:

foo(const std::string& str){
     std::string temp = str.substring(a, b);
}

答案 1 :(得分:1)

归功于operator precedence。元素选择运算符.的优先级高于解除引用运算符*,因此编译器实际上将其视为

*(str.substr(...))

有几种方法可以解决这个问题。我建议的是不使用指针,而是引用参数。然后,您不必担心解除引用或可能的空指针。如果你不想修改原始字符串,那么就是一个常量引用。

void foo(const std::string& str)
{
    // ...

    std::string temp = str.substr(...);

    // ...
}

然后在没有地址操作符

的情况下调用它
std::string str = ...;
foo(str);