System::String::default": Die Eigenschaft hat keine set-Methode
-
Hallo zusammen,
ich möchte einen String umdrehen. Dazu habe ich eine Klasse Stringtools geschrieben:///////// Stringtools.h //////////////////////////////////////// #pragma once ref class Stringtools { public: static System::String^ umdrehen(System::String^ zk) { System::String^ ergebnis; int j=0; for(int i=zk->Length-1; i>=0; i--) { ergebnis[j]=zk[i]; // hier kommt der Fehler j++; // error C3070: "System::String::default": Die } // Eigenschaft hat keine set-Methode. return(ergebnis); } }; //////////// main.cpp /////////////////// #include "stdafx.h" #include "Stringtools.h" using namespace System; int main(array<System::String ^> ^args) { String^ s = "Marianne"; Console::WriteLine(Stringtools::umdrehen(s)); return 0; }
Offenbar kann ich nicht einfach Zeichen ergebnis[j]=zk[i] zuweisen. Kann mir jemand weiterhelfen?
Vielen Dank im Voraus.
-
System::String
ist immuatble, d.h. er kann nicht geändert werden.
BenutzeSystem::Text::StringBuilder
um einen String zusammenzusetzen.Edit:
Ausserdem istergebnis
ein nullptr, du müsstest schon noch ein Objekt erzeugen.
-
Alternativ kannst Du natürlich auch den String in ein Char-Array umwandeln und dann dort alles rumdrehen...
Alternativ kannst Du natürlich auch Arrray::Reverse verwenden...
Es sei aber darauf hingewiesen, dass ein umdrehen des Strings nicht ganz trivial ist, wenn man auch Combining-Character beachten will (bzw. dies ja muss, sonst ist die Funktion einfach falsch!)
int main() { // Simple example: String^ str = "Hallo"; array<Char> ^ charArray = str->ToCharArray(); Array::Reverse(charArray); System::Windows::Forms::MessageBox::Show("'" + str + "' => '" + gcnew String(charArray) + "'"); // Combining characters: (WRONG)! auto str2c = gcnew array<Char> { 'a', 'b', 's', 'a', 0x0308, 'g', 'e', 'n' }; // absägen String^ str2 = gcnew String(str2c); array<Char> ^ charArray2 = str2->ToCharArray(); Array::Reverse(charArray2); System::Windows::Forms::MessageBox::Show("'" + str2 + "' => '" + gcnew String(charArray2) + "'"); // WRONG! // Combining characters: (CORRECT) auto str3c = gcnew array<Char> { 'a', 'b', 's', 'a', 0x0308, 'g', 'e', 'n' }; // absägen String^ str3 = gcnew String(str3c); System::Globalization::TextElementEnumerator ^enumerator = System::Globalization::StringInfo::GetTextElementEnumerator(str3); auto elements = gcnew System::Collections::Generic::List<String^>(); while (enumerator->MoveNext()) elements->Add(enumerator->GetTextElement()); elements->Reverse(); System::Windows::Forms::MessageBox::Show("'" + str3 + "' => '" + String::Concat(elements) + "'"); // CORRECT! }
Siehe auch:
http://www.c-plusplus.net/forum/161855-fullPS: Beispiel um korrektes Reversieren ergänzt
Siehe auch:
http://blog.kalmbach-software.de/de/2014/09/16/reverse-string-unicode-aware/
-
Vielen Dank für die prompte und ausführliche Antwort!