指针上的c++子字符串

C++ substring on pointers

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

是否有可能在c++中创建子字符串作为指针指向与原始字符串相同的内存?

假设我有一个字符串s = "just testing"和一个函数f。我希望函数f返回一个常量字符串对象(用户不能改变它),这将是s的子字符串,我希望f以最有效的方式创建这个子字符串。

我唯一的想法是返回一对指针-在子字符串的开始和结束,但我想给最终用户的"感觉",f返回一个对象,他可以打印它,迭代它等。

在c++中是可能的吗?

是有可能的。

您应该编写自己的类,作为子字符串开头和结尾的包装器。

此代码不完整,但显示方向。

class string_ref
{
    std::string::iterator b, e; // begin and end
public:
    string_ref(std::string::iterator b, std::string::iterator e) : b(b), e(e){}
    std::string to_string() const {
        return std::string(b, e);
    }
    std::string::iterator begin() const {
        return b;
    }
    std::string::iterator end() const {
        return e;
    }
    // ... Code to complete this class ... //
};
std::ostream &operator<<(std::ostream &out, const string_ref &str) {
    // out << str.to_string();
    for (std::string::iterator i = str.begin(); i != str.end(); i++) cout << *i;
    return out;
}
int main() {
    std::string s = "Hello";
    string_ref sr(s.begin(), next(s.begin(),3)); // pick first 3 charaters
    cout << sr << endl;                          // print it by cout
}

您可以迭代并简单地打印它