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


121

난 단지 1 캐스트 필요 charstring. 반대의 방법은 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.