web-dev-qa-db-ja.com

空白または改行で区切られた入力を読み取ります...?

標準入力ストリームから入力を取得しています。といった、

1 2 3 4 5

または

1
2
3
4
5

私は使用しています:

std::string in;
std::getline(std::cin, in);

しかし、それは改行までしかつかないのですか? iosteam、string、およびcstdlibのみを使用して改行OR whitespace(s)で区切られているかどうかを入力するにはどうすればよいですか?

19
user618712

ただ使用する:

_your_type x;
while (std::cin >> x)
{
    // use x
}
_

_operator>>_はデフォルトで空白をスキップします。一度にいくつかの変数を読み込むために物事を連鎖させることができます:

_if (std::cin >> my_string >> my_number)
    // use them both
_

getline()はすべてを1行で読み取り、それが空であるか、スペースで区切られた多数の要素を含むかを返します。オプションの代替デリミタala getline(std::cin, my_string, ' ')を提供する場合、それはまだあなたが望むようには思わないでしょう。タブは_my_string_に読み込まれます。

おそらくこれには必要ありませんが、すぐに興味があるかもしれないかなり一般的な要件は、改行で区切られた単一の行を読んでから、コンポーネントに分割することです...

_std::string line;
while (std::getline(std::cin, line))
{
    std::istringstream iss(line);
    first_type first_on_line;
    second_type second_on_line;
    third_type third_on_line;
    if (iss >> first_on_line >> second_on_line >> third_on_line)
        ...
}
_
28
Tony Delroy

getlineへのオプションの引数として'q'を使用します。

#include <iostream>
#include <sstream>

int main() {
    std::string numbers_str;
    getline( std::cin, numbers_str, 'q' );

    int number;
    for ( std::istringstream numbers_iss( numbers_str );
          numbers_iss >> number; ) {
        std::cout << number << ' ';
    }
}

http://ideone.com/I2vWl

5
Potatoswatter

ユーザーがEnterキーまたはスペースを押すことは同じです。

int count = 5;
int list[count]; // array of known length
cout << "enter the sequence of " << count << " numbers space separated: ";
// user inputs values space separated in one line.  Inputs more than the count are discarded.
for (int i=0; i<count; i++) {
    cin >> list[i];
}
1
mihai

std :: getline(stream、where to ?, delimiter ie

std::string in;
std::getline(std::cin, in, ' '); //will split on space

または、行を読み取ってから、希望する区切り文字に基づいてトークン化できます。

1
Tanner
#include <iostream>

using namespace std;

string getWord(istream& in) 
{
    int c;

    string Word;

    // TODO: remove whitespace from begining of stream ?

    while( !in.eof() ) 
    {

        c = in.get();

        if( c == ' ' || c == '\t' || c == '\n' ) break;

        Word += c;
    }

    return Word;
}

int main()
{
    string Word;

    do {

        Word = getWord(cin);

        cout << "[" << Word << "]";

    } while( Word != "#");

    return 0;
}
0
furas
int main()
{
    int m;
    while(cin>>m)
    {
    }
}

スペースまたは行で区切られている場合、これは標準入力から読み取ります。

0
AKhanna