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
にも記載されています。