コードがあるとします:
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;
}
標準入力からスペースシンボルを取得する方法は?スペースを書き込むと、プログラムは無視されます! :(コードの標準入力から使用できる「スペース」を意味する記号(「\ s」など)の組み合わせはありますか?
デフォルトでは、すべての空白(スペース、タブ、改行など)をスキップします。動作を変更するか、わずかに異なるメカニズムを使用できます。その動作を変更するには、次のようにマニピュレーターnoskipws
を使用します。
cin >> noskipws >> a[i];
しかし、あなたは個々の文字を見たいように見えるので、ループの前にこのようにget
を使用することをお勧めします
cin.get( a, n );
注:get
は、改行文字を検出した場合、ストリームからの文字の取得を停止します(\n
)またはn-1文字後。ヌル文字(\0
)配列に。 istream
インターフェイスの詳細については、こちらをご覧ください こちら 。
#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;
}
多くのスペースを含む完全な行を入力するには、getline(cin,string_variable);
を使用できます
例えば:
string input;
getline(cin, input);
この形式は、return
が押されるまで文のすべてのスペースをキャプチャします
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;
}
そして、==
ではなく、=
を使用して同等性を確認します。
Cinの>>演算子を使用すると、先頭の空白が削除され、最初の末尾の空白で入力が停止します。スペースを含む入力行全体を取得するには、cin.getline()
を試してください。一度に1文字を取得するには、cin.get()
を使用できます。
私は私のために働いた答えを共有すると思いました。前の行は改行で終わっていたため、これらの回答のほとんどは機能しませんでした。これは:
string title;
do {
getline(cin, title);
} while (title.length() < 2);
これは、入力が常に少なくとも2文字の長さであると想定していたため、私の状況ではうまくいきました。文字列"\n"
と単純に比較することもできます。
スペースを使用して入力を取得するには、この4つの方法をすべて試してください。
#include<iostream>
#include<stdio.h>
using namespace std;
void dinput(char *a)
{
for(int i=0;; i++)
{
cin >> noskipws >> a[i];
if(a[i]=='\n')
{
a[i]='\0';
break;
}
}
}
void input(char *a)
{
//cout<<"\nInput string: ";
for(int i=0;; i++)
{
*(a+i*sizeof(char))=getchar();
if(*(a+i*sizeof(char))=='\n')
{
*(a+i*sizeof(char))='\0';
break;
}
}
}
int main()
{
char a[20];
cout<<"\n1st method\n";
input(a);
cout<<a;
cout<<"\n2nd method\n";
cin.get(a,10);
cout<<a;
cout<<"\n3rd method\n";
cin.sync();
cin.getline(a,sizeof(a));
cout<<a;
cout<<"\n4th method\n";
dinput(a);
cout<<a;
return 0;
}
同じ問題があり、cin.getline(input,300);
を使用しました。
noskipws
とcin.get()
は使いにくい場合があります。配列のサイズは適切であるため、cin.getline()
を使用してください。これは、文字を気にせず、指定した文字数で行全体を読み取ります。