2009-09-24 4 views
0

어떻게 char에 대한 포인터를 반환하는 C++에서 하위 문자열을 구현합니까?substring C++

+0

"implement"라고 말하면 위에 게시 한 서명이있는 substr 함수를 작성한다는 의미입니까? 아니면 C++ 같은 함수가 있다는 것을 의미합니까? – sblom

답변

4

은 내가 std::string 클래스의 방법을 사용합니다.


편집 :

은 숯불 *의 SUBSTR (숯불 *의 C, INT 볼때, INT의 아이폰에) 같은 것이

이가 잘 implemement하는 것이 가능 함수 아니라고 . 원래 문자열로

  • 같은 메모리 : : 문자열을 만들려면 메모리를 필요로 원래 문자열을 덮어 찾으시는 것입니까? 원래 문자열이 쓰기 가능합니까?

  • 새 메모리 : 호출자가 substr 함수에서받은 포인터에 delete [] 연산자를 호출 할 것입니까? 그렇지 않으면 메모리 누수가 발생합니까?

  • 전역 메모리 : 전역 메모리에 고정 길이 버퍼를 예약 할 수 있지만 모든 종류의 문제입니다 (충분히 길지 않고 다른 사람이 substr을 호출 할 때 덮어 쓰게됩니다). (A char* 예와는 달리)에 std::string 인스턴스가 자신의 수명을 관리하기 때문에

을 수행하는 올바른 방법은, Graphics Noob's answer 같이 string::substr 방법은 무엇 인 std::string 인스턴스를 반환하는 것입니다 기억; std::string 인스턴스의 char* 인스턴스를 원할 경우 c_str() 메소드를 사용하여 인스턴스를 가져올 수 있습니다.

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은 얻으려고하는 부분 문자열의 매개 변수를 참조합니다.

관련 문제