2009-06-15 10 views
0

Wenn Sie während der Eingabe in cin ein Leerzeichen eingeben, wird die erste Zeichenfolge vor dem Leerzeichen als erster Wert und die spätere als nächste eingegeben.Ändern von C++ cin

Also lassen Sie uns sagen, wir haben diesen Code:

cout << "Enter your Name"; 
cin >> name; 

cout << "Enter your age"; 
cin >> age; 

Nun lassen Sie uns sagen, ein Benutzer "John Bill" eintritt.

Es würde seinen Namen annehmen, um John und sein Alter zu sein, um Bill zu sein.

Gibt es eine Möglichkeit zu:

  1. Hat die Linie automatisch von einem ändern ‚‘ zu einem ‚_‘?

  2. Haben Sie es so, dass es diese Zeile als diese Zeile lesen und den Raum '' als ein normales Zeichen lesen?

Antwort

4

Um eine Zeile in C++ zu lesen:

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    cout << "Enter some stuff: " ; 
    string line; 
    getline(cin, line); 
    cout << "You entered: " << line << endl; 
} 
+0

Keine Notwendigkeit, die Zeichenfolge Header-Datei/Bibliothek aufzurufen. Besser ist es, ein char-Array zu verwenden oder besser noch ein char *, um die Aufgabe zu erledigen. – Sev

+10

Falsch - mehr als in diese Kommentarbox passt. –

+2

Nutzloser Kommentar, da tut es niemand gut. Wenn du der Welt sagen willst, dass ich falsch liege, weise sie darauf hin, warum ich falsch liege. – Sev

2

Sie wollen cin.getline() verwenden, die wie folgt verwendet werden kann:

cin.getline(name, 9999, '\n'); 

Und wird alles bis zum Newline oder 9999 Zeichen umfassen. Dies funktioniert jedoch nur für C-Style Char-Arrays.

getline(cin, name, '\n'); 

funktioniert für Std :: Strings.

Wenn Sie den Speicherplatz durch einen Unterstrich ersetzen möchten, müssen Sie das manuell tun. Angenommen, Sie verwenden std :: string Sie könnte eine Funktion wie diese machen:

void replace_space(std::string &theString) 
{ 
    std::size_t found = theString.find(" "); 
    while(found != string::npos) 
    { 
     theString[found] = '_'; 
     found = theString.find(" ", found+1); 
    } 
} 
+1

Oder std :: replace (theString.begin(), theString.end(), '', '_'); –

0

Wenn Sie das tun „cin >>“, die Sie anrufen cin.get mit den ios :: skipws Flagge vorbelegt. Rufen Sie explizit cin.get auf, um Whitespaces einzuschließen.

cin.get(name, strlen(name)) 

Quelle:http://minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm

+1

Die Seite, auf die Sie verweisen, sollte geschlossen werden, und es besteht eine Gefahr für Lernprogrammierer. Und sogar es befürwortet nicht den Code, den Sie bereitstellen. –

+0

Ich habe die Seite durchgesehen und es scheint mir eine gut erklärte Referenz zu sein. Kannst du klarer sein, damit andere die Gefahr auf einer scheinbar richtigen Seite verstehen? – Kai

0

Ich würde vorschlagen, die std :: string mit, da es sicherer ist. Die Verwendung eines char * + Speicherzuweisung über malloc ist gefährlich und muss für die Zuweisung überprüft werden. Sie sollten jedoch diesen Link für weitere Informationen überprüfen, wenn der andere nützlich ist. https://stackoverflow.com/a/6117751/1669631