如何在c ++中使用cin?

时间:2010-05-04 13:03:19

标签: c++ spaces cin

假设我们有一个代码:

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'或类似的东西),这意味着我可以从代码的标准输入中使用“空间”?

8 个答案:

答案 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);

noskipwscin.get()有时不易使用。由于您的数组大小合适,请尝试使用cin.getline(),它不关心任何字符,并以指定的字符数读取整行。