Return eines Strings und "Overflow" Error
-
Huch, tatsächlich, [6] kommt ja nur bei dem deklarieren hinzu , mein fehler.
Danke für den Hinweis! Da es immer noch nicht läuft wird das aber leider nicht der letzte Fehler gewesen sein ..
-
dein korrigiertes programm ist ja auch genauso scheiße, wie das vorherige.
also:
//String erstellen string str; //Array aus Strings erstellen (hier 5 Stück), die von 0 - 4 angesprochen werden können string str[5];
-
HansKlaus schrieb:
dein korrigiertes programm ist ja auch genauso scheiße, wie das vorherige.
also:
//String erstellen string str; //Array aus Strings erstellen (hier 5 Stück), die von 0 - 4 angesprochen werden können string str[5];
...schön dass du als cpp-Experte auf die Welt gekommen bist. (Wortwahl!)
Aber mit den 'std::string Teststring[6]' liegt wirklich einiges in argen. So etwas habe ich so noch nicht gesehen und ich denke auch es ist ein Array of std::strings. Es ist also nicht vergleichbar mit einem 'char Teststring[6]'.
@Ripleys: Soll lauf Aufgabenstellung ein std::string verwendet werden oder ein char-array? Oder steht da einfach nur, dass max. 6 Zeichen eingegeben werden sollen?
viele Grüße,
SBond
-
Da wir im Lande des allmächtigen C++ leben, ist std::string einem char-array vorziziehen. Reine Arrays statischer Größe werden recht selten gebraucht und sollten im Falle eines Falles durch std::array ersetzt werden, diese Klasse fängt nämlich gleich noch ungültige Indizes ab.
-
Es soll einfach ein Wort mit 5 Buchstaben angegeben werden.
Das mit den Arrays tut mir leid, da hab ich wirklich nen Bock geschossen wohl..
hab das soweit berichtigt, es läuft auch endlich, nur ich krieg egal bei welcher eingabe, die ausgabe:JOUFD
Sie haben eingegeben: JOUFD
Verschlüsselt ist das 0x61feecEs fehlt also die entschlüsselung und die Verschlüsselung ist auch nicht ganz richtig..
#include <iostream> #include <string> char Verschluesselung(char Teststring[6], int j) { char Lookup[2][27] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ","MNOPQRSTUVWXYZABCDEFGHIJKL"}; for(int i=0; i<=26; i++) { if(Teststring[j] == Lookup[0][i]) { char c = Lookup[1][i] ; return c; } } return 'X'; } std::string Entschluesselung(std::string Code) { char Entschluesselt[6]; char Lookback[2][27] = {"MNOPQRSTUVWXYZABCDEFGHIJKL","ABCDEFGHIJKLMNOPQRSTUVWXYZ" } ; for(int x=0; x<=5; x++) { for(int i=0; i<=26; i++) { if(Code[x] == Lookback[0][i]) { Entschluesselt[x]=Lookback[1][i]; break; } } } return Entschluesselt; } int main() { char Teststring[6]; std::cin >> Teststring; char Verschluesselt[6]; char Entschluesselt[6]; for (int j=0; j<=5; j++) { Verschluesselt[j] = Verschluesselung(Teststring,j); } std::cout << "Sie haben eingegeben: " << Teststring << std::endl; std::cout << "Verschlüsselt ist das " << Verschluesselt << std::endl ; Entschluesselt= Entschluesselung(Verschluesselt); std::cout << "Wiederum entschluesselt ist das " << Entschluesselt << std::endl ; return 0; }
-
6 Habe ich halt eingetragen wegen dem '\0' am ende des strings
-
#include <iostream> #include <string> char Verschluesselung(char Teststring[6], int j) { char Lookup[2][27] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ","MNOPQRSTUVWXYZABCDEFGHIJKL"}; for(int i=0; i<=26; i++) { if(Teststring[j] == Lookup[0][i]) { char c = Lookup[1][i] ; return c; } } return 'X'; } std::string Entschluesselung(std::string Code) { char Entschluesselt[6]; char Lookback[2][27] = {"MNOPQRSTUVWXYZABCDEFGHIJKL","ABCDEFGHIJKLMNOPQRSTUVWXYZ" } ; for(int x=0; x<=5; x++) { for(int i=0; i<=26; i++) { if(Code[x] == Lookback[0][i]) { Entschluesselt[x]=Lookback[1][i]; break; } } } return Entschluesselt; } int main() { char Teststring[6] = "ABCDE"; std::cin >> Teststring; char Verschluesselt[6]; std::string Entschluesselt; // --> std::string statt char for (int j=0; j<=5; j++) { Verschluesselt[j] = Verschluesselung(Teststring,j); } std::cout << "Sie haben eingegeben: " << Teststring << std::endl; std::cout << "Verschlüsselt ist das " << Verschluesselt << std::endl ; Entschluesselt= Entschluesselung(Verschluesselt); // Entschluesselung() gibt einen std::string zurück und kein char[] std::cout << "Wiederum entschluesselt ist das " << Entschluesselt << std::endl ; return 0; }
Ausgabe:
HALLO Sie haben eingegeben: HALLO Verschlüsselt ist das TMXXA Wiederum entschluesselt ist das HALLO
So geht es.
Allerdings gibt es bei diesem Code keine Sicherung bei der Eingabe. Wenn du mehr Zeichen eintippst, kommt es zum Überlauf.
-
Deshalb std::string benützen.
-
dub di dub.
#include <cstddef> #include <cctype> #include <string> #include <iostream> std::string rotate( std::string const & str, std::size_t offset ) { std::string dst; for( auto ch : str ) { if( std::islower( ch ) ) dst += 'a' + ( ( ch - 'a' + offset ) % ( 'z' - 'a' + 1 ) ); else if( std::isupper( ch ) ) dst += 'A' + ( ( ch - 'A' + offset ) % ( 'Z' - 'A' + 1 ) ); else dst += ch; } return dst; } int main() { std::string input; std::cin >> input; for( std::size_t i{}; i <= 'z' - 'a' + 1; ++i ) std::cout << rotate( input, i ) << '\n'; std::cout.put( '\n' ); }
-
Swordfish schrieb:
dub di dub.
#include <cstddef> #include <cctype> #include <string> #include <iostream> std::string rotate( std::string const & str, std::size_t offset ) { std::string dst; for( auto ch : str ) { if( std::islower( ch ) ) dst += 'a' + ( ( ch - 'a' + offset ) % ( 'z' - 'a' + 1 ) ); else if( std::isupper( ch ) ) dst += 'A' + ( ( ch - 'A' + offset ) % ( 'Z' - 'A' + 1 ) ); else dst += ch; } return dst; } int main() { std::string input; std::cin >> input; for( std::size_t i{}; i <= 'z' - 'a' + 1; ++i ) std::cout << rotate( input, i ) << '\n'; std::cout.put( '\n' ); }
-
Danke für die Hilfe!
Eine frage hätte ich aber noch,
wieso krieg ich denn ne fehlermeldung bei Entschluesselt=Entschluesselung(..); wenn ich entschluesselt als chararray deklariere, aber keine weil ich eig bei entschlue3sselung nen std::string returnen sollte, aber dort nen chararray returne?
-
Arrays können nicht zurückgegeben werden, genauso wenig wie du Arrays einander zuweisen kannst.
Deshalb wurde std::string erfunden.
-
Danke !
-
Insgesamt werden die eingebauten Arrays nie gebraucht, eher werden dynamische Container wie vector und string benutzt, für statische Sachen gibt es std::array.