Изменение C ++ Cin - PullRequest
0 голосов
/ 16 июня 2009

Когда вы вводите пробел '' при вводе в cin, первая строка перед пробелом будет приниматься как первое значение, а более поздняя - как следующая.

Допустим, у нас есть этот код:

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

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

Теперь предположим, что пользователь вводит "Джон Билл".

Его имя было бы Иоанном, а его возраст - Биллом.

Есть ли способ:

  1. Может ли строка автоматически изменить его с '' на '' '?

  2. Иметь ли его так, чтобы он читал эту строку как эту строку, а пробел '' читался как обычный символ?

Ответы [ 4 ]

4 голосов
/ 16 июня 2009

Чтобы прочитать строку в C ++:

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

int main() {
    cout << "Enter some stuff: " ;
    string line;
    getline( cin, line );
    cout << "You entered: " << line << endl;
}
2 голосов
/ 16 июня 2009

Вы хотите использовать cin.getline (), который можно использовать так:

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

И будет включать все до новой строки или 9999 символов. Это работает только для массивов символов в стиле c.

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

будет работать для std :: strings.

Если вы хотите заменить пробел подчеркиванием, вам придется сделать это вручную. Предполагая, что вы используете std :: string, вы можете создать такую ​​функцию:

void replace_space(std::string &theString)
{
    std::size_t found = theString.find(" ");
    while(found != string::npos)
    {
        theString[found] = '_';
        found = theString.find(" ", found+1);
    }
}
0 голосов
/ 30 сентября 2012

Я бы предложил использовать std :: string, так как это безопаснее. Использование char * + для выделения памяти через malloc опасно, и его нужно проверить на распределение. Однако вы должны проверить эту ссылку для получения дополнительной информации о том, когда другой выгоден https://stackoverflow.com/a/6117751/1669631

0 голосов
/ 16 июня 2009

Когда вы делаете «cin >>», вы вызываете cin.get с установленным по умолчанию флагом ios :: skipws. Вызовите cin.get явно, чтобы он содержал пробелы.

cin.get(name, strlen(name))

Источник: http://minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm

...