C++:cinとgetlineの文字列入力時の違い

1693 ワード

C++:cinとgetlineの文字列入力時の違い
cin >> your_string
  • std::cin>>your_を通過stringで文字列を入力する場合、入力した文字列の先頭がスペース、タブ、およびリターンの場合、これらの記号は無視され、後続の文字から入力が開始されます.
    std::string your_string = "";
    std::cin >> your_string;  //     "  Hello"
    std::cout << your_string << std::endl;;
    
    Hello
    
  • 入力文字列にスペースとタブが含まれている場合、これらの文字は入力終了条件として標準入力ストリームを早期に終了させる.
    std::string your_string = "";
    std::cin >> your_string;  //     "Hello World"
    std::cout << your_string << std::endl;;
    
    Hello
    

  • getline(cin, your_string)
  • std::getlineメソッドはstd::cin入力文字列と比較して、先頭のスペース記号、タブ記号、およびリターン記号を受信し、入力文字列のスペース記号とタブ記号も受信します.
    std::string your_string = "";
    std::getline(std::cin, your_string);  //     "Hello World"
    std::cout << your_string << std::endl;
    
    Hello World
    

  • 文字バッファの違い
  • 入力文字列にスペースとタブが含まれていない場合はstd::cin>>your_を使用します.string方式文字列を入力すると、文字バッファに戻り文字が残ります.次回std::cin>>your_を使用すると、string文字列を入力すると、バッファに残っているリターンが入力に影響しないことがわかります.これは、文字列の先頭のリターンが無視されるためです.ただし、getlineはリターン記号を終了フラグとしているため、std::cinが文字列を入力してgetlineを使用して次の文字列を入力すると問題が発生します.
    std::string str1 = "", str2 = "";
    std::cin >> str1;	//   "Hello"    
    std::getline(std::cin , str2); //     "World",           。
    std::cout << str1;  // str1 == "Hello"
    std::cout << str2;  // str2 == ""
    std::cout << std::endl;
    std::cout << str2.empty(); //   str2    
    
    Hello
    1
    
  • なので、実際に文字列を入力する場合は、入力した文字列にスペースが含まれているかどうかにかかわらずgetline方式で文字列を入力することをお勧めします.