实现substring c ++

时间:2009-09-24 00:00:32

标签: c++ string

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

char* substr(char* c, int pos, int lenght

之类的东西

3 个答案:

答案 0 :(得分:4)

我使用std::string类的方法。


编辑:

  

说像char * substr(char * c,int pos,int lenght)

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

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

  • 新内存:调用者是否会在从substr函数接收的指针上调用delete []运算符(如果没有,会有内存泄漏)?< / p>

  • 全局内存:你可以在全局内存中保留一个固定长度的缓冲区,但这是各种各样的问题(可能不够长,当别人调用你的substr时会被覆盖)。 / p>

正确的做法是返回一个std::string实例,这是string::substr方法所做的,如Graphics Noob's answer所示,因为std::string实例(与char*实例不同)将管理自己内存的生命周期;如果您想要char*实例中的std::string实例,则可以使用c_str()方法获取该实例。

答案 1 :(得分:2)

答案 2 :(得分:1)

str.substr(int,int).c_str()

将子字符串作为const char*返回,但要小心使用它,包含字符串的内存在语句末尾将无效,因此如果strcpy()可能需要用std::string str2 = str.substr(int,int); const char* cstr = str2.c_str(); 包围它你想存储结果。或者更好,但只需将其分为两行:

const

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

{{1}}指的是你想要得到的子字符串的参数。