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;
}

如何从标准输入中输入空格符号?如果你写空格,程序会忽略!:( 是否有任何符号组合(例如 '\s' 或类似的东西)表示“空格”,我可以从标准输入中为我的代码使用?

4

8 回答 8

44

默认情况下,它会跳过所有空格(空格、制表符、换行符等)。您可以更改其行为,或使用稍微不同的机制。要更改其行为,请使用 manipulator noskipws,如下所示:

 cin >> noskipws >> a[i];

但是,由于您似乎想查看单个字符,因此我建议get您在循环之前使用 ,就像这样

 cin.get( a, n );

注意: get如果找到换行符 ( \n) 或在 n-1 个字符之后,它将停止从流中检索字符。它提前停止,以便可以将空字符 ( \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

要输入包含大量空格的整行,您可以使用getline(cin,string_variable);

例如:

string input;
getline(cin, input);

这种格式捕获句子中的所有空格,直到return被按下

于 2015-05-01T16:43:49.797 回答
5

用于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;
}

并用于==检查相等性,而不是=.

于 2010-05-04T13:06:44.320 回答
4

使用 cin 的 >> 运算符将删除前导空格并在第一个尾随空格处停止输入。要获取整行输入,包括空格,请尝试cin.getline(). 要一次抓取一个字符,您可以使用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 回答
2

试试这四种方法来输入空间:)

#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;
}
于 2017-04-05T06:36:42.260 回答
0

我有同样的问题,我刚刚使用cin.getline(input,300);.

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

于 2014-12-08T05:50:56.887 回答