【问题标题】:How do I stop reading a newline from a string?如何停止从字符串中读取换行符?
【发布时间】:2020-08-05 07:57:14
【问题描述】:

我必须找到一种方法来显示给定文本的第二行。如果文本长度少于两行,则应显示“文本不够长”。我最初的解决方案是两次使用getline() 函数,但在线评估员拒绝通过其中一项测试..

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    string a;
    getline(cin,a);
    getline(cin,a);
    if(a.length())
        cout << a;
    else
        cout << "text not long enough";
}

您能发现问题并提出解决方案吗?

【问题讨论】:

  • 您需要检查 getline 是否工作,它是否真的读取了一行。此外,一行可以为空,因此测试零长度字符串也不正确。 string a; if (getline(cin, a) &amp;&amp; getline(cin, a)) cout &lt;&lt; a; else cout &lt;&lt; "text not long enough";
  • 对不起,忘了说语句说每一行至少有一个字符 != 来自空格
  • @john,您的解决方案有效!!!如果您将其发布为答案,我会给它一个复选标记。谢谢老哥!

标签: c++ string methods


【解决方案1】:

if(a.length()) 行应该完成什么?它只是检查字符串a 是否包含至少一个字符。

在你写的伪代码中:

if a has at least one character then
    print a
else
    print "text not long enough"

这是因为如果长度为 0,则它转换为 false,其他所有数字都被视为 true

正如john 写道:

if (getline(cin, a) && getline(cin, a))
    cout << a;
else cout << "text not long enough";

大致可以这样翻译:

bool isInputTwoLinesLong()
{
    int newlines = 0;
    char c;
    while(cin >> c)
    {
        if (c == '\n') newlines++;

        // input contains at least two lines
        if (newlines == 2) return true;
    }

    // input not long enough
    return false;
}

【讨论】:

  • 我不认为这个答案解决了基本问题,如果输入少于两行,该怎么办。
  • 我的错,忘了说每一行至少有一个字符 != 来自空格。所以我想既然第二行的长度为0,那么文本一定太短了
  • @john 我编辑了答案。看起来好点了吗?
猜你喜欢
  • 2018-08-22
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多