31

コードがあるとします。

int main()
{
   char a[10];
   for(int i = 0; i < 10; i++)
   {
       cin>>a[i];
       if(a[i] == ' ')
          cout<<"It is a space!!!"<<endl;
   }
   return 0;
}

標準入力からスペース記号を cin する方法は? スペースを書き込むと、プログラムは無視します! :(コードの標準入力から使用できる「スペース」を意味する記号(「\ s」など)の組み合わせはありますか?

4

8 に答える 8

44

デフォルトでは、すべての空白 (スペース、タブ、改行など) をスキップします。その動作を変更するか、わずかに異なるメカニズムを使用できます。その動作を変更するにはnoskipws、次のようにマニピュレータを使用します。

 cin >> noskipws >> a[i];

しかし、個々の文字を見たいように見えるのでget、ループの前にこのように使用することをお勧めします

 cin.get( a, n );

注: 改行文字 ( ) が見つかった場合、または n-1 文字の後にget、ストリームからの文字の取得を停止します。\nヌル文字 ( \0) を配列に追加できるように、早期に停止します。istreamインターフェイスの詳細については、こちらをご覧ください。

于 2010-05-04T13:20:49.277 に答える
20
#include <iostream>
#include <string>

int main()
{
   std::string a;
   std::getline(std::cin,a);
   for(std::string::size_type i = 0; i < a.size(); ++i)
   {
       if(a[i] == ' ')
          std::cout<<"It is a space!!!"<<std::endl;
   }
   return 0;
}
于 2010-05-04T13:13:43.693 に答える
6

使用できるスペースを多く含む AN ENTIRE LINE を入力するにはgetline(cin,string_variable);

例えば:

string input;
getline(cin, input);

returnこのフォーマットは、が押されるまで文中のすべてのスペースをキャプチャします

于 2015-05-01T16:43:49.797 に答える
5

cin.get()次の文字を読み取るために使用します。

ただし、この問題では、一度に 1 文字ずつ読み取るのは非常に非効率的です。istream::read()代わりにを使用してください。

int main()
{
   char a[10];
   cin.read(a, sizeof(a));
   for(int i = 0; i < 10; i++)
   {
       if(a[i] == ' ')
          cout<<"It is a space!!!"<<<endl;
   }
   return 0;
}

==ではなく、等価性をチェックするために使用し=ます。

于 2010-05-04T13:06:44.320 に答える
4

cin の >> 演算子を使用すると、先頭の空白が削除され、最初の末尾の空白で入力が停止します。スペースを含む入力行全体を取得するには、 を試してくださいcin.getline()。一度に 1 文字を取得するには、 を使用できますcin.get()

于 2010-05-04T13:07:43.030 に答える
3

私のために働いた答えを共有したいと思いました。前の行は改行で終わっているため、これらの回答のほとんどは機能しませんでした。これは次のことを行いました:

string title;
do {
  getline(cin, title);
} while (title.length() < 2);

これは、入力が常に少なくとも 2 文字の長さであると想定していたため、私の状況ではうまくいきました。単純に string と比較することもできます"\n"

于 2016-10-12T10:33:32.073 に答える
0

私は同じ問題を抱えており、ちょうど使用しcin.getline(input,300);ました。

noskipwsまた、cin.get()使いにくい場合もあります。配列のサイズが適切であるためcin.getline()、文字を気にせず、指定された文字数で行全体を読み取ってみてください。

于 2014-12-08T05:50:56.887 に答える