C ++ 1 문자에서 문자열로 변환? [닫은]


121

난 단지 1 캐스트 필요 char로 string. 반대의 방법은 str[0].

다음은 나를 위해 작동하지 않았습니다.

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.

3
복제 할 수 없음 : coliru.stacked-crooked.com/…
— chris

10
string(1, c)작동하지 않는다고 생각하는 이유는 무엇입니까 ? 이것이 올바른 방법입니다.
— templatetypedef

1
어떤 컴파일러를 사용하고 있습니까? 어떤 환경. 아마도 이것은 컴파일러의 버그 일 수 있습니다.
— Maurice Reeves

libc ++ abi.dylib : 종료 호출 예외 발생
— weeo

3
@ weeo- 오류는 아마도 프로그램의 다른 곳에있을 것입니다. 오류를 보여주는 자체 포함되고 재현 가능한 예제를 게시하여 무엇이 잘못되었는지 파악하는 데 도움을 드릴 수 있습니다.
— templatetypedef

답변:


184

모든

std::string s(1, c); std::cout << s << std::endl;

과

std::cout << std::string(1, c) << std::endl;

과

std::string s; s.push_back(c); std::cout << s << std::endl;

나를 위해 일했습니다.


4
가장 짧은 방법은 다음과 같습니다. string s =“”+ c;
— doctorram

17
@doctorram 아니! 1. 사용중인 인용 부호가 잘못된 C ++입니다. 2. s = "" + c"빈 문자열을 문자와 연결"을 의미하는 것이 아니기 때문에 UB 일 뿐이라고 하더라도 "빈 문자열의 c일부 사본에 대한 포인터를 의미 c합니다. 3. 당신이 의미한다면 s = ""s + c, 그것은 여전히보다 길다 s{1, c}... (그리고 당신은 using std::literals;어딘가에 써야 할 것입니다 ...
— Massa

11
죄송합니다. 문자열 s = string () + 'a';
— doctorram

1
나는 ... 그 잘못된 의견에 upvote에 제거 can'r
— 제이크 OPJ에게

10

나는 솔직히 캐스팅 방법이 잘 될 것이라고 생각했습니다. 그렇지 않기 때문에 stringstream을 시도해 볼 수 있습니다. 예는 다음과 같습니다.

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
이 특정 문자열 생성자가 작동하지 않는다는 사실이 실제 문제와 관련이 있다고 생각하지 않습니다.
— chris

1
P : 아마 잘하지만, 내가 쉽게 답을 제공 거라고 생각
— Mallen

이 솔루션은 작동하지만 stringstream ( <sstream>)을 사용 하면 프로젝트에 전체 라이브러리가 포함되어 컴파일 프로세스가 느려지므로 필요하지 않습니다. 프로젝트에 불필요한 종속성을 포함하지 않도록하십시오.
— Cristian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.