while schleife problem!
-
hallo ich brauche Hilfe bei einer Aufgabe die wir zurzeit im praktikum machen.
Man soll ein Programm schreiben das solange Zeichen einliest, bis man "." eintippt. Dann sollen alle Zeichen die man getippt hat in großbuchstaben ausgegeben werden. Anschließend soll das Programm die Länge des
Textes und die Summe der ASCII-Codes der Zeichen ausgeben.Zum Beispiel:
eingabe: abc
ausgabe: ABC Textlänge: 3 Prüfsumme: 294Bisher habe ich das programm soweit das wenn ich ein zeichen eingebe das es als großbuchstabe ausgegeben wird.
Bitte um Hilfe!

-
Du hast vergessen, eine Frage zu stellen.
-
achso klar

ich möchte wissen wie ich das hinbekomme das wenn ich ein Zeichen eingebe das dieses an die Schleife angehängt wird. Zum beispiel:
eingabe: a
Bisherige Wort lautet: aeingabe: b
Bisherige Wort lautet: abusw.
-
Indem du die Buchstaben in einem Array speicherst.
Tommy199667 schrieb:
Zum Beispiel:
eingabe: abc
ausgabe: ABC Textlänge: 3 Prüfsumme: 294und wo ist da der . ?
-
und wie mache ich das ?
-
char array[20]; //Das ist ein Array bestehend aus 20 Variablen vom Typ char. array[0] = 'a'; //Erstes Element vom Array ist a. array[19] = 'b'; //Letztes Element vom Array ist b.
-
ich verstehe grade nicht was mir das bringen soll?
ich weis ja nicht die Länge der Zeichenkette. es soll solange die schleife durchführen bis ich in die eingabe einen Punkt schreibe.
-
Dann mach dass Array eben dynamisch, aber ein statisches von 1000 Zeichen dürfte doch auch locker reichen.
Ich denke nicht, dass irgendjemand lust hat 1000 Zeichen oder mehr in die Konsole einzutippen
-
Benutzde einen std::string oder eine std::vector, aber kein Array.
#include <string> #include <iostream> int main() { std::string s; char a = 'a'; char b = 'b'; s.push_back(a); s.push_back(b); std::cout << s << "\n"; }
-
Vergiss das Array! Vollkommen unnötig!
Also, was hast Du bis jetzt? Einlesen bis Punkt und als Großbuchstaben ausgeben? Dann wäre der nächste Schritt Anzahl der Buchstaben mitzählen - kriegst Du das hin? Wenn nein: Wo ist das konkrete Problem?
-
manni66 schrieb:
Benutzde einen std::string oder eine std::vector, aber kein Array.
#include <string> #include <iostream> int main() { std::string s; char a = 'a'; char b = 'b'; s.push_back(a); s.push_back(b); std::cout << s << "\n"; }Wieso? Es geht hier doch nicht um strings, sondern um die einzelnen Buchstaben.
-
Bitmapper schrieb:
Wieso? Es geht hier doch nicht um strings, sondern um die einzelnen Buchstaben.
Worin unterscheidet sich ein String von einer Ansammlung einzelner Buchstaben?
Wenn du es Arrayähnlich heben willst, kannst du die zweite Alternative nehmen, aber sicher nicht "wird schon passen" Arrays.
-
Bitmapper schrieb:
manni66 schrieb:
Benutzde einen std::string oder eine std::vector, aber kein Array.
#include <string> #include <iostream> int main() { std::string s; char a = 'a'; char b = 'b'; s.push_back(a); s.push_back(b); std::cout << s << "\n"; }Wieso? Es geht hier doch nicht um strings, sondern um die einzelnen Buchstaben.
Tommy199667 schrieb:
...Man soll ein Programm schreiben das solange Zeichen einliest, bis man "." eintippt. Dann sollen alle Zeichen die man getippt hat in großbuchstaben ausgegeben werden. ...
Also zwischenspeichern, std::string bietet sich da förmlich an....
Aber vielleicht habe ich auch die Aufgabe nicht verstanden....
dirkski
Edit: Es bietet sich tatsache ein char-array wg. getline() an

Dachte da kann man einen std::string oder std::strstream übergeben. Sorry
-
dirkski schrieb:
Edit: Es bietet sich tatsache ein char-array wg. getline() an

Dachte da kann man einen std::string oder std::strstream übergeben. SorrySelbstverständlich kann man da einen std::string benutzen.
-
manni66 schrieb:
Selbstverständlich kann man da einen std::string benutzen.
Vermutlich hat er nur std::basic_istream::getline gesehen und std::getline übersehen.
-
sebi707 schrieb:
manni66 schrieb:
Selbstverständlich kann man da einen std::string benutzen.
Vermutlich hat er nur std::basic_istream::getline gesehen und std::getline übersehen.
Treffer!

-
manni66 schrieb:
Benutzde einen std::string oder eine std::vector, aber kein Array.
...Hmm, äöü werden nicht umgewandelt. std::wstring bietet sich an!
locale richtig setzen usw., dann müsste das klappern...
Edit2: Ich sollte auch die Aufgabe richtig lesen. Dort stand ASCII-Zeichen
dirkski
Edit:
Mit std::string:Bitte Text eingeben ('.' für Ende, auch mehrzeilig): abc. Eingabe umgewandelt in Großbuchstaben (ohne Punkt): ABC Anzahl Zeichen: 3 Prüfsumme: 294Aber:
Bitte Text eingeben ('.' für Ende, auch mehrzeilig): äöü. Eingabe umgewandelt in Großbuchstaben (ohne Punkt): äöü Anzahl Zeichen: 6 Prüfsumme: 18446744073709551199Und mit std::wstring:
Bitte Text eingeben ('.' für Ende, auch mehrzeilig): äöü. Eingabe umgewandelt in Großbuchstaben (ohne Punkt): ÄÖÜ Anzahl Zeichen: 3 Prüfsumme: 726
-
#include <iostream> #include <sstream> #include <string> #include <algorithm> #include <cctype> #include <numeric> int main() { std::string str; while (std::cout << "Bitte Text eingeben (zum Abbruch . eintippen): " && std::getline(std::cin, str)) { if (str.find(".") != std::string::npos) break; int sum = std::accumulate(str.begin(), str.end(), 0); std::transform(str.begin(), str.end(), str.begin(), std::toupper); std::cout << "Grossbuchstaben: " << str << "\n" << "Anzahl Zeichen: " << str.length() << "\n" << "Pruefsumme: " << sum << "\n\n"; } std::cout << "\n*** Programm abgebrochen. ***\n"; }Denn meiner Meinung nach macht es keinen Sinn auf ein . zu warten bevor die Ausgabe erfolgt, da so ja nur eine Ausgabe gemacht werden könnte. Ansonsten müsste man den Konsoleninhalt überschreiben, um ein interaktives Konsolenfenster zu erstellen, aber das ist ja auch nicht zweckmäßig.
Anstatt transform und accumulate könnte man natürlich auch in einer for-Schleife über die Zeichen iterieren. Aber ist eben so drin.