代码之家  ›  专栏  ›  技术社区  ›  Tom

实现子串C++

  •  0
  • Tom  · 技术社区  · 16 年前

    如何在C++中实现将指针返回到字符的子字符串?(将指针指向第一个字母)

    比如说 char* substr(char* c, int pos, int lenght )

    3 回复  |  直到 16 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    我使用的方法 std::string


    编辑:

    比如说char*substr(char*c,int-pos,int-lenght)

    这不是一个可以很好实现的函数。要创建子字符串,需要内存:

    • 与原始字符串相同的内存:您的意思是覆盖原始字符串吗?原始字符串可写吗?

    • 新内存:调用者是否要调用从用户接收的指针上的delete[]操作符 substr 函数(如果没有,就会出现内存泄漏)?

    • 全局内存:您可以在全局内存中保留一个固定长度的缓冲区,但这是各种各样的问题(可能不够长,当其他人调用您的 substr ).

    正确的方法是返回 std::string 例如,这是 string::substr 方法确实如此,如中所示 Graphics Noob's answer ,因为 std::string 实例(不同于 char* 实例)将管理其自身内存的生存期;如果你想要一个 炭* 来自 std::string 例如,你可以使用 c_str() 方法

        2
  •  2
  •   Igor Zevaka    16 年前
        3
  •  1
  •   Graphics Noob    16 年前
    str.substr(int,int).c_str()
    

    将子字符串作为 const char* 但是使用时要小心,包含字符串的内存在语句末尾将无效,因此您可能需要用 strcpy() 如果要存储结果。或者最好把它分成两行:

    std::string str2 = str.substr(int,int);
    const char* cstr = str2.c_str();  
    

    你需要做一个strcpy()来安全地摆脱 const .

    这个 int s指的是要获取的子字符串的参数。