2014-02-09 6 views
1

다른 프리미티브를 사용하여 문자열을 추가하는 솔루션을 찾고 있었고 stringstream이 가장 쉬운 솔루션이라는 것을 알았습니다. 그러나 프로세스를 간소화하여 사용을 쉽게하기위한 기능을 만들고 싶었습니다. 대체 연결 방법을 제안 할 경우, 최종 결과가 char *가되어야합니다. 내가 가진 루프 (I) 사용 :C++ 함수의 매개 변수로 stringstream을 사용하려면 어떻게해야합니까?

std::stringstream ss; 
ss << "test" << i;  
char* name = new char[ss.str().size() + 1];//allocate 
strcpy(name, ss.str().c_str());//copy and put (char*)c_str in name 

그래서 출력이 뭔가 링크 test1test2test3입니다 ... 이것은 내가 소집 할 수있는 가장 합리적인 해결책이었다. 사용하기 쉽도록 기능에 넣으려고했지만 문제가 발생했습니다. 내가 좋아하는 뭔가를하고 싶어 :

char* string_to_pointer(char* dest, std::stringstream* _ss) { 
    char* result = new char[_ss->str().size() + 1]; 
    strcpy(result, _ss->str().c_str()); 
    return result; 
} 

나는 다음과 같이 할 수있다 :

std::stringstream ss; 
ss << "test" << i;  
char* name = string_to_pointer(name, &ss); 

전 C 꽤 새로운 해요 ++이 구문이 올바른 사용 것 같아,하지만 난 런타임에 실행하고를 부스트로 이어지지 않고 사용하기 쉬운 기능으로이 문제를 해결하는 방법에 대한 솔루션을 환영합니다.

+0

사용해 보셨습니까? 편집 : 런타임 문제는 무엇입니까? – lightandlight

+0

왜 "string_to_pointer"변환을 수행해야합니까? 그리고 최종 결과가 'char *'가되기를 원하십니까? 그것이 마지막이라면 더 이상 수정할 필요가 없으므로 const char *일까요? 그렇게하면 끝까지 문자열 스트링을 계속 사용할 수 있습니다. – mockinterface

+0

string_to_pointer가 이상합니다 : 첫 번째 매개 변수를 사용하지 않습니다. – laune

답변

0

는 문자열의 내용을 검색 할 std::stringstream::str() 기능을 사용합니다.

예 : 문자열 추가 수정하려는 해달라고하면

int foo = 42; 
double bar = 12.67; 

std::stringstream ss; 
ss << "foo bar - " << foo << ' ' << bar; 

std::string result = ss.str(); 

, 이제 간단한 전화 result.c_str()const char*를 취득 할 수 있습니다. 당신이 정말 modifyable char*을해야하는 경우, 당신은 CString을에 문자열의 내용을 복사 할 수 있습니다

std::unique_ptr<char[]> cstring = new char[result.size() + 1]; 
strcpy(cstring.get(), result.c_str()); 
+0

내가 쓴 해결책은 두 번째 코드 블록과 매우 비슷합니다. 그 블록을 사용하기 쉬운 기능으로 압축하는 데 문제가 있습니다.'char * myFunc (char * dest, stringstream ss)'또는'char * myFunc (char * dest, string s)'와 같은 것. 구체적으로 :'오류 오류 C3867 : 'std :: basic_string , std :: allocator > :: c_str': 함수 호출 누락 된 인수 목록; 'std :: basic_string , std :: allocator > :: c_str'을 사용하여 멤버에 대한 포인터를 만듭니다. ' – feyd

0
char* string_to_cstring (const std::string &_ss) 

청소기가 될까요? 함께 사용 string_to_cstring(ss.str())

반환 할 C- 문자열이 필요합니까? 그렇지 않다면, 당신이 그것을 필요로하는 곳이라면 ss.str().c_str()을 사용하십시오!

또는 사용 :

char* result = new char[ss.str().size() + 1](); // value initialized 
ss.str().copy(result,std::string::npos); 
0

어떻게 이런 일에 대해 :

#include <string> 
#include <sstream> 

class ToString { 
    std::ostringstream stream; 
public: 
    template<typename T> 
    inline ToString &operator<<(const T&val) { 
    stream << val; 
    return *this; 
    } 

    inline operator std::string() const { 
    return stream.str(); 
    } 
}; 

당신은 다음과 같이 사용할 수 있습니다 :

std::string str = ToString() << "Test " << 5 << " and " << 4.2; 
관련 문제