String bei falscher Eingabe wiederholen
-
Hallo Zusammen,
ich hätte da mal eine Frage und zwar wie kann man eine String Eingabe vom Benutzer , wenn der String beispielweise keine Leerzeichen, Satzzeichen und Zahlen enthalten darf, diese trotzdem mit zur Eingabe hinzufügt wiederholen bis er den String richtig eingibt ? Ich weiß , dass man dies mit der do-while Schleife programmieren kann, jedoch weiß ich nicht wie man es mit Strings umsetzt. Habe vor paar Wochen mit der Programmierung angefangen, deswegen weiß ich noch nicht viel . Würde mich auf jede Antwort freuen.
-
do
{
stringeingabe;
stringKorrekt = pruefString;
} while(!stringKorrekt);
-
@conq-haki-10 sagte in String bei falscher Eingabe wiederholen:
beispielweise keine Leerzeichen, Satzzeichen und Zahlen enthalten darf,
Ich weiß nicht ob das im Umkehrschluss heißt daß die Eingabe nur Buchstaben enthalten darf, aber
#include <cctype> #include <string> #include <algorithm> #include <iostream> bool check_input(std::string const &input) { return std::all_of(std::begin(input), std::end(input), [](char ch) { return std::isalpha(ch); }); } int main() { std::string input; while (std::cout << "Your input: ", !std::getline(std::cin, input) || !input.length() || !check_input(input)) { std::cerr << "Input error :(\n\n"; std::cin.clear(); } std::cout << "Validated input: \"" << input << "\".\n\n"; }
Standard library header <cctype>
Vielleicht möchte man vor der Validierung noch links und rechts Whitespace trimmen.
-
@Swordfish ja genau nur Buchstaben sollen enthalten sein. Ich frage mich wie das gehen könnte wenn man das Programm wie du das oben gemacht hast nur ohne die bool Funktion machen würde, da ich mich mit Funktionen noch nicht beschäftigt habe . Aber trotzdem Danke versuche dein Programm jetzt nachzuvollziehen.
-
@conq-haki-10 sagte in String bei falscher Eingabe wiederholen:
Ich frage mich wie das gehen könnte wenn man das Programm wie du das oben gemacht hast nur ohne die bool Funktion machen würde, da ich mich mit Funktionen noch nicht beschäftigt habe
std::string input; while (std::cout << "Your input: ", !std::getline(std::cin, input) || !input.length() || !std::all_of(std::begin(input), std::end(input), [](char ch) { return std::isalpha(ch); })) { std::cerr << "Input error :(\n\n"; std::cin.clear(); }
^^
Beschäftige Dich mit Funktionen. Das da:
[](char ch) { return std::isalpha(ch); }
ist auch eine funktionsähnliches Ding, eine Lambda Expression.
-
@Swordfish sagte in String bei falscher Eingabe wiederholen:
Standard library header <cctype>
Das ist aber ein C-Header.
-
@eigenartig ist es nicht. Aber glaube was du willst.
-
@Swordfish Ja außer einen C-Header einbinden und dessen Bezeichner in ein Namespace schieben tut das Ding wohl nichts.
-
@eigenartig Ja, und? Der Header
<cctype>
ist Teil der C++ Standard Library. Ich weiß auch nicht was diese Diskussion hier soll.