2016-05-01 6 views
1

Ich muss ein Programm schreiben, das es dem Benutzer ermöglicht bis zu 20 Namen von bis zu 40 Zeichen pro einzugeben.Stringlänge innerhalb eines Sets begrenzen?

Wenn ich den Code schreibe, ohne zu versuchen, die String-Längen in irgendeiner Weise zu begrenzen, funktioniert es. Aber wenn ich versuche, die String-Länge mit einer if/else-Anweisung zu begrenzen, funktioniert es nicht. Ich bin ziemlich neu in C++, also war es wirklich ein Schuss in die Dunkelheit. Was mache ich falsch?

#include <iostream> 
#include <string> 
#include <set> 
#include <algorithm> 

using namespace std; 

void print(const string& name) { 
    cout << name << endl; 
} 

int main() { 
    set<string> ListOfNames; 
    cout << "Please enter up to 20 names of up to 40 characters each below:  " << endl; 
for (int i = 1; i <= 20; ++i) { 
    string name; 
    cout << i << ". "; 
    getline(cin, name); 
    if (name.size() >= 40) { 
     ListOfNames.insert(name); 
    } 
    else break; 
    cerr << "You entered more than 40 characters. Please try again."; 
} 

for_each(ListOfNames.begin(), ListOfNames.end(), &print); 
return 0; 

} 

Ausgang:

1. (user inputs name here) 
press any key to continue... 

EDITED CODE:

#include <iostream> 
#include <string> 
#include <set> 
#include <algorithm> 

using namespace std; 

void print(const string& name) { 
    cout << name << endl; 
} 

int main() { 
    set<string> ListOfNames; 
    cout << "Please enter up to 20 names of up to 40 characters each below:   " << endl; 
for (int i = 1; i <= 20; ++i) { 
    string name; 
    cout << i << ". "; 
    getline(cin, name); 
    if (name.size() <= 40) { 
     ListOfNames.insert(name); 
    } 
    else 
    { 
     cerr << "You entered more than 40 characters. Please try again."; 
     break; 
    } 

    for_each(ListOfNames.begin(), ListOfNames.end(), &print); 
    return 0; 
    } 
} 

Antwort

0

innerhalb, wenn die Bedingung in name.size() ändern> = 40

und in anderen Pause nach CRR und beide th Anweisung sollte in einem {}

if (name.size() <= 40) { 
    ListOfNames.insert(name); 
} 
else 
{ 
    cerr << "You entered more than 40 characters. Please try again."; 
    break; 
} 
+0

Wenn ich das tue, erlaubt es mir nur an den Eingang 1 Namen, nicht alle 20. Zum Beispiel: Eingabe: 1. Max Ausgabe: Max –

+0

Bitte geben Sie den bearbeiteten Code ein. – Reshad

+0

Ich habe den neuen Code bearbeitet und am Ende hinzugefügt. –

1

Es scheint, wie gesagt, Sie nur den Code ausführen, wenn die Zeichenfolge größer ist als 40 nicht weniger als 40

1

Schreibe eine separate Funktion die Eingabe zu erhalten und zu validieren sein. In dieser Funktion prüfen, ob die Eingabe weniger als 40 Zeichen lang ist, und sich weigern, es zu akzeptieren, wenn dies nicht der Fall:

std::string get_limited_string(std::string prompt, int max = 40) { 
    std::string input; 
    do { 
     std::cout << prompt; 
     std::getline(std::cin, input); 
    } while (input.size() >= max); 
    return input; 
} 
+0

Wo würde ich diese Funktion in meinem Code nennen? –

+0

Rufen Sie es aus der Schleife, die die 20 Eingabezeichenfolgen sammelt. –