0

cin に入力する際に​​スペース ' ' を入力すると、スペースの前の最初の文字列が最初の値として取得され、後の文字列が次の値として取得されます。

それでは、このコードがあるとしましょう:

cout << "Enter your Name";
cin >> name;

cout << "Enter your age";
cin >> age;

ここで、ユーザーが「John Bill」と入力したとします。

彼の名前はジョンで、彼の年齢はビルです。

次の方法はありますか?

  1. 行が自動的に ' ' から '_' に変更されますか?

  2. その行をその行として読み取り、スペース ' ' を通常の文字として読み取るようにしますか?

4

4 に答える 4

4

C++ で行を読み取るには:

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

int main() {
    cout << "Enter some stuff: " ;
    string line;
    getline( cin, line );
    cout << "You entered: " << line << endl;
}
于 2009-06-15T22:46:41.143 に答える
2

次のように使用できる cin.getline() を使用します。

cin.getline(name, 9999, '\n');

改行または 9999 文字までのすべてが含まれます。ただし、これは c スタイルの char 配列に対してのみ機能します。

getline(cin, name, '\n');

std::strings で機能します。

スペースをアンダースコアに置き換えたい場合は、手動で行う必要があります。std::string を使用していると仮定すると、次のような関数を作成できます。

void replace_space(std::string &theString)
{
    std::size_t found = theString.find(" ");
    while(found != string::npos)
    {
        theString[found] = '_';
        found = theString.find(" ", found+1);
    }
}
于 2009-06-15T22:44:59.540 に答える
0

「cin >>」を実行すると、デフォルトで ios::skipws フラグが設定された状態で cin.get が呼び出されます。cin.get を明示的に呼び出して、空白を含めます。

cin.get(name, strlen(name))

ソース: http://minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm

于 2009-06-15T22:46:26.463 に答える
0

より安全な std::string を使用することをお勧めします。malloc を介して char * + 割り当てメモリを使用することは危険であり、割り当てを確認する必要があります。ただし、他の方が有益な場合の詳細については、このリンクを確認する必要があります https://stackoverflow.com/a/6117751/1669631

于 2012-09-29T21:02:22.473 に答える