【问题标题】:Remove whitespace from input stream by only means of istream functions仅通过 istream 函数从输入流中删除空格
【发布时间】:2013-03-18 10:31:51
【问题描述】:

输入小数后有什么办法可以去掉尾随空格? 例如:

10        A

我想在空格结束后捕捉第一个字符。 (必须是 \n 为真。如果不是,则为假

到目前为止我的尝试:

cout << "Please enter a number: ";
cin >> n;

if (cin.peek() == ' ')
    //Something to catch the whitespaces

if(cin.fail() || cin.peek() != '\n')
    cout << "Not a number." << endl;

else
    cout << "A number." << endl;

可以通过 istream 中的函数来实现吗?

(我知道cin.fail可以做好事,但它仍然不认为输入10A为失败)

【问题讨论】:

标签: c++ whitespace istream trailing


【解决方案1】:

正如@chris 所说,您真的想从阅读整行开始,然后从那里开始阅读其余的内容。

std::string line;
std::getline(cin, line);

std::stringstream buffer(line);

buffer >> n;

char ch;
if (buffer >> ch) 
    cout << "Not a number";

【讨论】:

    【解决方案2】:

    我对您的尝试感到有些困惑。你是说你试图避免空白吗?

    cin 跳过那些...它是一个有效的空白分隔符,如制表符或换行符。如果你这样做:

    int A(0), B(0);
    
    std::cin >> A >> B;
    

    输入的数字将进入 A,直到您输入空格,然后它们将进入 B。

    如果您正在使用字符串并希望将它们连接成一个没有空格的;

    std::string A, B, C;
    std::string final;
    
    std::cin >> A >> B >> C;
    
    std::stringstream ss;
    ss << A << B << C;
    final = ss.str();
    

    但是,就像 Jerry 提到的那样,如果您处理字符串,您可以只执行 std::getline() ,这可能会减少您的麻烦。

    【讨论】:

      【解决方案3】:

      感谢您的帮助。 使用字符串确实很容易,是的。虽然不允许使用它。

      可以通过这个简单的方法来完成:

      cout << "Please enter a number: ";
      cin >> n;
      
      while (cin.peek() == ' ')
         cin.ignore(1,' ');
      
      if(cin.fail() || cin.peek() != '\n')
         cout << "Not a number." << endl;
      
      else
         cout << "A number." << endl;
      

      【讨论】:

      • while 循环可以替换为对 std::cin &gt;&gt; std::ws; 的调用。
      • @0x499602D2 你在某个地方的答案中得到了这个?这就是我来这里寻找的答案,我想投赞成票。
      猜你喜欢
      • 2023-03-16
      • 1970-01-01
      • 2022-12-16
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      相关资源
      最近更新 更多