0

現在、4 文字の配列を受け取り、その文字列に基づいて別の値を返す関数があります。

私が望むのは、ユーザーに文字の行全体を入力させ、ループを作成して各「文字のサブグループ」を調べ、それらすべての結果を返すことです。

私の最初の考えは、どういうわけか push_back を使用して、配列をベクトルに追加し続けることです。

配列全体の長さはわかりませんが、3 の積である必要があります。

例として、今私はできる:

char input [4] ;
cin >> input;  

int i = name_index[name_number(input)];
cout << name[i].fullName;

しかし、私が望むのは、ユーザーが一度に複数の名前の略語を入力することです

4

2 に答える 2

-1

cin が機能する方法は、任意の量の入力を受け入れ、それぞれをスペースで区切ることです。特定の入力を要求すると、ユーザーに入力を求めるプロンプトが表示され、最初の文字列 (スペースまで) のみが取得されます。その後にさらに入力がある場合はcin >> input、ユーザーに再度プロンプトを表示することなく、別の入力がその値を取得します。改行文字だけが残っているときに、入力の実際の最後にいつ到達したかがわかります。このコードにより、スペースで区切られた複数の文字列を入力し、ユーザーがテキストを入力した後にそれらを一度に処理できるようになります。

char input[4];
do // Start our loop here.
{
    // Our very first time entering here, it will prompt the user for input.
    // Here the user can enter multiple 4 character strings separated by spaces.

    // On each loop after the first, it will pull the next set of 4 characters that
    // are still remaining from our last input and use it without prompting the user
    // again for more input.

    // Once we run out of input, calling this again will prompt the user for more
    // input again. To prevent this, at the end of this loop we bail out if we
    // have come accros the end of our input stream.
    cin >> input;

    // input will be filled with each 4 character string each time we get here.
    int i = name_index[name_number(input)];
    cout << name[i].fullName;
} while (cin.peek() != '\n'); // We infinitely loop until we reach the newline character.

EDIT:また、4文字だけを割り当てても、最後に追加されるinput文字列の終わりを考慮しないことに注意してください。'\0'ユーザーが 4 文字を入力すると、実際には、文字列を に割り当てるときに不良メモリにアクセスしますinput。4 文字 + 1 末尾の文字があるため、 には最低 5 文字を割り当てる必要がありますinput。最善の方法はstd::string、ユーザーが 4 文字を超えて入力しても適切にサイズ変更されるため、そのまま使用することです。

于 2013-07-31T18:53:37.507 に答える