假设我们有一个代码:
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'或类似的东西),这意味着我可以从代码的标准输入中使用“空间”?
答案 0 :(得分:41)
默认情况下,它会跳过所有空格(空格,制表符,换行符等)。您可以更改其行为,也可以使用稍微不同的机制。要更改其行为,请使用操纵器noskipws
,如下所示:
cin >> noskipws >> a[i];
但是,既然你似乎想要查看单个字符,我建议你使用get
,就像你的循环之前一样
cin.get( a, n );
注意:如果get
找到换行符char(\n
)或n-1个字符后,\0
将停止从流中检索字符。它会提前停止,以便它可以将空字符(istream
)附加到数组中。您可以详细了解{{1}}界面here。
答案 1 :(得分:17)
#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;
}
答案 2 :(得分:5)
要输入包含大量空格的整个行,您可以使用getline(cin,string_variable);
例如:
string input;
getline(cin, input);
此格式捕获句子中的所有空格,直到return
被按下
答案 3 :(得分:4)
使用cin.get()
读取下一个字符。
但是,对于这个问题,一次读取一个字符是非常低效的。请改用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;
}
使用==
检查相等性,而不是=
。
答案 4 :(得分:2)
使用cin&gt;&gt;运算符将删除前导空格并在第一个尾随空格处停止输入。要获取整行输入,包括空格,请尝试cin.getline()
。要一次抓取一个字符,您可以使用cin.get()
。
答案 5 :(得分:2)
我以为我会分享对我有用的答案。上一行以换行符结束,因此大多数这些答案本身并不起作用。这样做了:
string title;
do {
getline(cin, title);
} while (title.length() < 2);
这假设输入总是至少2个字符长,这适用于我的情况。您也可以尝试将其与字符串"\n"
进行比较。
答案 6 :(得分:1)
尝试这四种方式来获取空间输入:)
#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;
}
答案 7 :(得分:0)
我遇到了同样的问题,我刚刚使用了cin.getline(input,300);
。
noskipws
和cin.get()
有时不易使用。由于您的数组大小合适,请尝试使用cin.getline()
,它不关心任何字符,并以指定的字符数读取整行。