C++ で <iostream> >>str の cin と <string> の getline(cin, str) を使用してユーザー入力を読み取る 2 つの異なる方法の違い

C++ の <iostream> の cin >> str と <string> の getline(cin, str) の違いは、ユーザー入力の読み取りに使用されます。

<string> の getline() 関数の構文は次のとおりです [ https://cplusplus.com/reference/string/string/getline/ ]:

istream& getline (istream& is, string& str, char delim);

このうち、is は入力ストリーム オブジェクト、str はターゲット文字列オブジェクト、delim は区切り文字を示すオプションのパラメータ (区切り文字、デフォルトは改行文字 '\n') です。

getline() 関数を使用すると、入力ストリームからテキスト行を読み取り、区切り文字 (またはファイルの終わり) に到達するまで、読み取った内容をターゲット文字列 str に保存します。区切り文字 delim が指定されている場合、getline() 関数はこの文字に遭遇すると読み取りを停止します。それ以外の場合は、デフォルトで改行文字が使用されます。

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

int main() {
  
    string str;
    cout << "请输入名字:";
    getline(cin, str);  //cin >> str;
    
     // 检查字符串是否为空
    if (str.empty()) {
        cout << "The string is empty." << endl;
    } else {
        cout << "The string is not empty." << endl;
    }
    
    return 0;
}

実行結果:

 特記事項: C++ で <iostream> の cin >> str と <string> の getline(cin, str) を使用してユーザー入力を読み取る 2 つの異なる方法の違い: ☆ 異なるデータ
型: cin >> str は読み取りに使用されます。 getline(cin, str) は文字列の行全体を読み取るために使用されますが、文字列型の単一の単語または数値データ (整数、実数など) です。
☆ 区切り文字: cin >> str を使用する場合、入力は空白文字 (スペース、タブ、改行など) によって異なる文字列に分割され、空白文字以外の最初の文字から始まる連続した文字列が str に格納されます。残りの部分は入力キューに残りますが、getline(cin, str) は空白文字を含む入力行全体を読み取り、改行文字に遭遇する前に str に格納します。
☆入力制限: cin >> str は空白文字より前の内容しか読み取れないため、スペースを含む文字列は読み取れず、一度に読み取れる単語または数字は 1 つだけです。また、getline(cin, str) はスペースを含む完全な行を読み取ることができるため、複数の単語またはテキストの行全体を読み取ることができます。
☆ 改行処理: cin >> str は、読み取り後に入力ストリームに改行を残します。これは、次の読み取り操作に影響を与える可能性があります。対照的に、getline(cin, str) は、後続の読み取り操作に影響を与えないように、入力ストリームから改行文字を削除します。
[:空白文字とは、テキスト内で目に見える形を持たない文字を指します。主にスペース、タブ、改行が含まれます。これらはテキスト処理においてさまざまな役割を果たします。
スペース (スペース): テキスト内の単語または文字を区切る目に見えるスペースを示します。連続する複数のスペースは 1 つのスペースとして扱われます。
タブ (タブ): 通常は \t で表され、テキスト内で固定幅を占め、テキスト内のコンテンツを位置揃えするためによく使用されます。
改行: 改行を表す特殊文字。オペレーティング システムによって表現方法が異なる場合があります。Unix および Linux システムでは、改行文字は \n で表されます。Windows システムでは、改行文字は、復帰文字 (Carriage Return) と \r\n で表される改行文字の 2 つの文字で構成されます。
これらの空白文字は、入出力操作中に注意して扱う必要があります。C++ では、空白文字はさまざまなデータ項目を区切るためによく使用され、改行文字は行の終わりをマークするために使用されます。ユーザー入力を正しく解析して処理し、正しくフォーマットされた出力を生成するには、これらの文字を理解し、正しく処理することが重要です。

C++ には 2 つの getline 関数があることに注意してください。最初のものはヘッダー ファイル <istream> https://cplusplus.com/reference/istream/istream/getline/で定義され、2 つ目はヘッダー ファイル <string> https://cplusplus.com/referenceで定義されます。 /string /string/getline/
<istream> の getline() 関数は入力ストリームからテキスト行を読み取るために使用され、<string> の getline() 関数は文字列からテキスト行を読み取るために使用されます。

前に紹介したのは、<string> の getline() 関数です。

<istream> の getline() 関数を以下に紹介します。 getline() 関数は istream クラスのメンバー関数であり、入力ストリーム (cin など) からテキスト行を読み取り、それを std に保存できます。 :文字列オブジェクト。その関数プロトタイプは次のとおりです。

istream& getline (char* s, streamsize n, char delim );

パラメータの説明:

s: 抽出された文字が C 文字列として格納される文字配列へのポインターを表します。

n: 文字配列 s の最大長を指定します。

delim: 行区切り文字を示すオプションのパラメータ。指定しない場合、デフォルトは改行文字 ('\n') です。

<istream> の getline() 関数は、テキスト行を読み取り、それを文字配列に格納するために使用されます。

例えば:

#include <iostream>   
using namespace std;
 
int main()
{
	char name[256];
	cout << "Please input your name: ";
	cin.getline(name, 256); // 从标准输入读取一行文本
	cout << "The result is:  " << name << endl;
  
    return 0; 
}

それを実行します:

付録C++ の 2 つの getline 関数の使用法については、 https://www.jb51.net/article/180289.htm
にも記載されています。 

おすすめ

転載: blog.csdn.net/cnds123/article/details/132430664