wchar_t zu String
-
Sc0rpe schrieb:
was ist den eigentlich der unterschied zwischen wstring und string ?
string benutzt intern char. wstring benutzt intern wchar_t.
wchar_t wc = L'w'; wstring wstr; // Du musst <string> inkludieren. wstr += wc;
-
wchar_t alt[100] = L"safagsagagaha"; wstring neu(alt);
-
okay soweit so gut,
nun hab ich aber das Problem das ich den String noch verändern muss, also der string soll ein dateipfad sein.wstring Name; Name+=name; Name="c:/Project/"+Name+".txt"; ofstream datei; datei.open(Name.c_str(),ios_base::out); datei.close();leider bleibt das ganze hier hängen:
Name="c:/Project/"+Name+".txt";wie kann ich das jetzt mit wstring machen oder kann ich jetzt den wstring in einen normalen string casten?
-
Irgendwo hackts dann doch. Wieso nimmst du dann nicht gleich
std::string?
-
out schrieb:
Irgendwo hackts dann doch. Wieso nimmst du dann nicht gleich
std::string?weil ich dazu gezwungen bin den wchar_t zu verwenden , damit kann ich jedoch nicht weiterarbeiten. ich würde ja auch gern ein string nehmen aber da es anscheindend nicht so einfach ist wchar_t in string umzuwandeln und mir gesgagt wurde dann den wstring zu nehmen....
mein ziel ist es ja auch am ende den string zu haben
-
Erstens wäre es immer gut, wenn du die Fehlermeldungen angibst, damit man sieht, woran es hakt. Bei dir hängts jetzt wahrscheinlich daran, dass du ein L vor die Zeichenketten schreiben musst, damit sie als wchar_t- und nicht als char-Zeichenketten interpretiert werden.
Zum Konvertieren gibts was im neuen Standard: http://en.cppreference.com/w/cpp/locale/wstring_convert
-
David_pb schrieb:
Hier wurde mal ein wunderbarer Codeschnippsel gepostet:
/* string2wstring.h */ #pragma once #include <string> #include <vector> #include <locale> #include <functional> #include <iostream> // Put this class in your personal toolbox... template<class E, class T = std::char_traits<E>, class A = std::allocator<E> > class Widen : public std::unary_function< const std::string&, std::basic_string<E, T, A> > { std::locale loc_; const std::ctype<E>* pCType_; // No copy-constructor, no assignment operator... Widen(const Widen&); Widen& operator= (const Widen&); public: // Constructor... Widen(const std::locale& loc = std::locale()) : loc_(loc) { #if defined(_MSC_VER) && (_MSC_VER < 1300) // VC++ 6.0... using namespace std; pCType_ = &_USE(loc, ctype<E> ); #else pCType_ = &std::use_facet<std::ctype<E> >(loc); #endif } // Conversion... std::basic_string<E, T, A> operator() (const std::string& str) const { typename std::basic_string<E, T, A>::size_type srcLen = str.length(); const char* pSrcBeg = str.c_str(); std::vector<E> tmp(srcLen); pCType_->widen(pSrcBeg, pSrcBeg + srcLen, &tmp[0]); return std::basic_string<E, T, A>(&tmp[0], srcLen); } }; // How to use it... int main() { Widen<wchar_t> to_wstring; std::string s = "my test string"; std::wstring w = to_wstring(s); std::wcout << w << L"\n"; }grüße
-
Ups, sorry, vergiß den Code. Das ist natürlich die falsche Richtung.

-
Wie ist es hiermit?
wstring wstr(L"xyz"); string s; s.assign(wstr.begin(), wstr.end());
-
out schrieb:
Wie ist es hiermit?
wstring wstr(L"xyz"); string s; s.assign(wstr.begin(), wstr.end());das hab ich auch schon gefunden dazu wurde aber gesagt es sei unportabel und sollte deshalb nicht genutzt werden

...da ich aber bisher auch keine andere Funktionierende lösung gefunden habe hab ich es übergangshabler erstmal so gemacht ....