Co sprawia, że myślisz, że string(1, c)nie działa? To jest właściwy sposób, aby to zrobić.
templatetypedef
1
Którego kompilatora używasz? Jakie środowisko. Może to błąd twojego kompilatora.
Maurice Reeves
libc ++ abi.dylib: terminate o nazwie rzucanie wyjątku
weeo
3
@ weeo- Błąd prawdopodobnie znajduje się w innym miejscu twojego programu. Prześlij samodzielny, odtwarzalny przykład, który demonstruje błąd, abyśmy mogli pomóc Ci dowiedzieć się, co jest nie tak.
templatetypedef
Odpowiedzi:
184
Wszystkie z
std::string s(1, c); std::cout << s << std::endl;
i
std::cout << std::string(1, c)<< std::endl;
i
std::string s; s.push_back(c); std::cout << s << std::endl;
@doctorram NO! 1. cudzysłowy, których używasz, są nieprawidłowe w C ++; 2. nawet jeśli miałeś na myśli, s = "" + cże to po prostu UB, ponieważ nie oznacza to "konkatenacji pustego ciągu ze znakiem c", oznacza to "wskaźnik do jakiejś kopii pustego ciągu, rozszerzony o wartość liczbową c(która definitywnie nie jest tym, czym chciał); 3. jakbyś miał na myśli s = ""s + c, to jeszcze dłużej niż s{1, c}... (a musiałbyś using std::literals;gdzieś pisać ...
Massa
11
Przepraszam, miałem na myśli: string s = string () + 'a';
doctorram
1
Nie mogę usunąć głosu za złym komentarzem ...
Jake OPJ,
10
Szczerze myślałem, że metoda odlewania zadziała. Ponieważ tak nie jest, możesz spróbować stringstream. Przykład poniżej:
#include<sstream>#include<string>
std::stringstream ss;
std::string target;char mychar ='a';
ss << mychar;
ss >> target;
Nie sądzę, że fakt, że ten konkretny konstruktor ciągów nie działa, ma coś wspólnego z prawdziwym problemem.
chris
1
Prawdopodobnie tak, ale pomyślałem, że podam prostą odpowiedź: P
Mallen
To rozwiązanie działa, jednak użycie metody stringstream ( <sstream>) nie jest konieczne, ponieważ włączy całą bibliotekę do projektu, spowalniając proces kompilacji. Staraj się unikać niepotrzebnych zależności w swoim projekcie.
string(1, c)
nie działa? To jest właściwy sposób, aby to zrobić.Odpowiedzi:
Wszystkie z
i
i
pracował dla mnie.
źródło
s = "" + c
że to po prostu UB, ponieważ nie oznacza to "konkatenacji pustego ciągu ze znakiemc
", oznacza to "wskaźnik do jakiejś kopii pustego ciągu, rozszerzony o wartość liczbowąc
(która definitywnie nie jest tym, czym chciał); 3. jakbyś miał na myślis = ""s + c
, to jeszcze dłużej niżs{1, c}
... (a musiałbyśusing std::literals;
gdzieś pisać ...Szczerze myślałem, że metoda odlewania zadziała. Ponieważ tak nie jest, możesz spróbować stringstream. Przykład poniżej:
źródło
<sstream>
) nie jest konieczne, ponieważ włączy całą bibliotekę do projektu, spowalniając proces kompilacji. Staraj się unikać niepotrzebnych zależności w swoim projekcie.