Я пробовал манипулятор noskipws в C++, и я написал следующий код.Демонстрация noskipws в C++
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string first, middle, last;
istringstream("G B Shaw") >> first >> middle >> last;
cout << "Default behavior: First Name = " << first << ", Middle Name = " << middle << ", Last Name = " << last << '\n';
istringstream("G B Shaw") >> noskipws >> first >> middle >> last;
cout << "noskipws behavior: First Name = " << first << ", Middle Name = " << middle << ", Last Name = " << last << '\n';
}
Я ожидаю, что следующий вывод:
Ожидаемый выход
Default behavior: First Name = G, Middle Name = B, Last Name = Shaw
noskipws behavior: First Name = G, Middle Name = , Last Name = B
Выход
Default behavior: First Name = G, Middle Name = B, Last Name = Shaw
noskipws behavior: First Name = G, Middle Name = , Last Name = Shaw
Я изменил этот код, чтобы заставить его работать для символов, как это и он отлично работает.
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
char first, middle, last;
istringstream("G B S") >> first >> middle >> last;
cout << "Default behavior: First Name = " << first << ", Middle Name = " << middle << ", Last Name = " << last << '\n';
istringstream("G B S") >> noskipws >> first >> middle >> last;
cout << "noskipws behavior: First Name = " << first << ", Middle Name = " << middle << ", Last Name = " << last << '\n';
}
Я знаю, как CIN работы, и я не мог понять, почему это работает таким образом, в случае string
.
В соответствии с этим сначала следует прочитать 'G', так как он встретит пространство, поэтому в' string middle' ничего не будет, а затем 'B' следует сохранить в' string last', но он сохраняет ' Shaw' в 'string last'. –
@mozart: см. Мое редактирование и прочитайте приведенную ссылку, это решительно решит проблему. –
Хорошо, я понял. Это означает, что 'string last' не меняется вообще? –