gpt4 book ai didi

C++如何去除输入末尾的空行?

转载 作者:太空狗 更新时间:2023-10-29 20:49:33 26 4
gpt4 key购买 nike

我有一个家庭作业,我需要创建一个过滤器来删除 cin 开头和结尾的空行。显然开始很容易,但我在结束时难住了。我想使用动态数组,但这是不允许的...

这是练习文本:

In this exercise develop a filter that removes empty lines existing at the beginning of cin and at the end of cin. A line is not empty if it contains at least one non-blank character. If an empty line contains blank characters then those characters can be ignored when writing that empty line to the standard output stream.

Caveats: we haven't covered arrays of undetermined sizes yet, so you can't store lines in an array, and you're not supposed to adopt the Perl approach, where you first read in the full file, and then process what you've got. Using a std::string variable is OK, but that variable may never contain more than one line read from the standard input.

我完全不知道你怎么知道最后是一个空行而不知道还有什么输入。如果能给我指明正确方向的任何帮助或提示,我将不胜感激。

我有第二个较小的问题。它说的是文件,但这是否意味着它只需要使用输入文件?截至目前,我只能让它适用于手动输入(通过某些特殊字符组合结束输入)或仅扫描新行(仅适用于文件)。有没有办法在两种情况下以相同的方式结束扫描? (我只是在使用 while 循环 atm)

虽然我们正在做这件事,但我对措辞有点困惑。只包含空白字符的行应该被打印,还是被视为空白行并被跳过?

提前致谢!

最佳答案

由于这是家庭作业,我会建议算法但不提供代码(那样会失去练习的意义)。

开头和结尾的空行必须去掉,但中间的空行必须保留。您只能缓存一行输入。想一想:你需要缓存一个空行来打印吗?或者你可以打印这样一行(或许多这样的行)而不缓存它们吗?在一个或多个空行之后必然会发生什么?

如果这些提示对您来说还不够,这里是算法:

cin 中一次读取一行。如果它不为空,则打印它。如果它是空的,请记住您遇到了一个空行。继续阅读,只要连续的行是空白的,就继续递增空白行计数器。最终,您将遇到一个非空的孤单或 EOF。如果是 EOF,则简单地结束。如果是非空行,则输出counter空行,并重置counter


关于另一个问题:C++ 将文件抽象为输入(或输出)的。流以到达 EOF(文件结尾)结束。 std::cin 只是一个特定的流(从 std::istream 子类化),std::ifstream 也是。您也永远不知道 std::cin 是来自键盘还是来自文件(例如使用 shell 重定向),您也不应该关心。只需将您的代码写入流接口(interface)即可。请注意, 也可以在交互式输入上发送 EOF;例如在 Linux 中,它是通过按 Ctrl+D 来完成的。

关于C++如何去除输入末尾的空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com