Grossbuchstaben in Kleinbuchstaben und umgekehrt
-
Hallo
Ich habe ein kleines Problem. Ich wollte ein Programm schreiben, das kleine Buchstaben in grosse - und grosse Buchstaben in kleine umwandelt. Aber leider funktioniert es nicht... ich weiss aber nicht wieso. Es wandelt es einfach nicht um, sondern gibt nochmal das gleiche aus hier ist der code:
//Einglenden der In/Out Bibliotheken #include <iostream> //Angabe, welchen Namenraum man nutzen will. Hier: Standart (std.) using namespace std; //Funktionssignaturen //Hauptfunktion int main() { // Variablen Deklaration char eingabe[256] = ""; char ausgabe ; cout << "Umwandlung von kleinen Buchstaben in grosse" << endl; cout << "Geben sie ein Buchstaben ein" << endl; cin >> eingabe; for (int i = 0; i <=256; i = i + 1) { if (eingabe[i] <=122 && eingabe[i] <=97) { (int) eingabe - 32; cout << (char)eingabe[i]; } else if (eingabe[i] >=65 && eingabe[i] <=90) { (int) eingabe + 32; cout << (char)eingabe[i]; } else cout << "Falsche eingabe" << endl; } system("PAUSE"); cin.get(); return 0; }
danke schonmal im Voraus ^^
gruss Pico
-
Probier mal
eingabe += 32
undeingabe -= 32
anstatt ohne dem Ist-Gleich-Zeichen. Sonst wird der Wert von eingabe nämlich nicht verändert.Oder du probierst mal
boost::algorithms::string::to_lower()
undboost::algorithms::string::to_upper()
.Viel Glück!
-
hola
seh dir mal die funktion toupper.
zu deinem code
if (eingabe[i] <=122 && eingabe[i] <=97)
was genau willst du da wirklich ueberpruefen ?
Meep Meep
-
pico schrieb:
Hallo
Ich habe ein kleines Problem. Ich wollte ein Programm schreiben, das kleine Buchstaben in grosse - und grosse Buchstaben in kleine umwandelt. Aber leider funktioniert es nicht... ich weiss aber nicht wieso. Es wandelt es einfach nicht um, sondern gibt nochmal das gleiche aus hier ist der code:
//Einglenden der In/Out Bibliotheken #include <iostream> using std::cout;//Bindet nur das ein, was man auch wirklich braucht. using std::cin; using std::endl; int main() { char String[256];//="" Kann man sich sparen, Speicher wird so oder so alloziiert. Außerdem wurde der Name geändert, wir wollen ja den Wert verändern und nicht kopieren. //ausgabe brauchen wir so nicht mehr. cout<<"Umwandlung von kleinen Buchstaben in grosse\n";//endl bereinigt den Puffer, und das ist Laufzeitlastig. Besser am Ende. cout<<"Geben sie ein String ein:\n"; cin.getline(String,254);//Liest die gesamte Zeile ein. Ein Nullterminierungszeichen, welches das Ende des Strings markiert, lassen wir der Funktion auch. for(int i=0;i<255;i++) { if(String[i]<123&&String[i]>96) String[i]-=32; else if(String[i]<91&&String[i]>64) String[i]+=32; //Das "Falsche Eingabe" sparen wir uns, schließlich kann ein String ja alles beinhalten. Nur bei Typenkonvertierung musst du aufpassen. } cout<<String<<endl;//Jetzt ein Flush ... obwohl, bringt der hier noch was? Ich glaube nicht ... cin.get(); return 0; }
Sollte so funktionieren, ich hab's erstellt und kompiliert.
-
#include <string> #include <locale> #include <algorithm> #include <iostream> int main() { locale loc; string a("ABcdEFg"); for_each(a.begin(), a.end(), [&](char& c) { if (isupper(c, loc)) c = tolower(c, loc); else c = toupper(c, loc); }); cout << a; }
Braucht natürlich lambda functions, also C++0x.
-
Da gehört natürlich noch
using namespace std;
hin.
-
Danke viel mals
Vielleicht habt ihr es gemerkt, das war eine ASCII-Tabellenübung. Das mit dem 256 war die Idee des Lehrers
-
du kannst char in int umwandeln und da dann die "großschreibung" draufrechnen ...
// pseudo
const int diffUpperToLower = 'A'-'a'; if ( deinzeichen in range ('a'..'z') ) toupper = deinzeichen + diffUpperToLower; if ( deinzeichen in range ('A'..'Z') ) tolower = deinzeichen - diffUpperToLower;
äüö musste gesondert machen - es sei denn du stellst fest das 'ä' = 'Ä'-diffUpperToLower usw...