如何cin空间在c + +?
假设我们有一个代码:
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; }
如何在标准input中input空格符号? 如果你写空间,程序忽略! :(是否有任何符号组合(例如'\ s'或类似的东西),这意味着我可以从标准input使用我的代码“空间”?
它默认跳过所有的空格(空格,制表符,新行等)。 您可以更改其行为,也可以使用稍微不同的机制。 要改变它的行为,使用操纵器noskipws
,如下所示:
cin >> noskipws >> a[i];
但是,既然你看起来像要看个人angular色,我build议在循环之前使用get
cin.get( a, n );
注意: get
将停止从stream中检索字符,如果它find一个换行符( \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; }
使用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; }
并使用==
来检查相等,而不是=
。
要input包含很多空格的整个行,可以使用getline(cin,string_variable);
例如:
string input; getline(cin, input);
这种格式捕捉句子中的所有空格,直到按下
使用cin的>>操作符会删除前导空格,并在第一个尾随空格处停止input。 要抓取整行input(包括空格),请尝试cin.getline()
。 要一次抓取一个字符,可以使用cin.get()
。
我以为我会分享为我工作的答案。 上一行以换行符结束,所以大多数这些答案本身都不起作用。 这样做:
string title; do { getline(cin, title); } while (title.length() < 2);
这是假设input总是至less2个字符长,这符合我的情况。 您也可以尝试简单地将它与string"\n"
进行比较。
尝试这四种方式来input空间:)
#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()
不关心任何字符,并阅读指定字符数的整个行。