【问题标题】:How to take this kind of a STDIN inputs in c++?如何在 C++ 中采用这种 STDIN 输入?
【发布时间】:2021-01-29 03:07:11
【问题描述】:

在许多黑客马拉松中,他们提供了测试用例。因此,在这些测试用例中,它们通过 STDIN 以不同的方式提供输入。这是我最挣扎的情况之一。

这是一种输入:(这是一个测试用例)

Mike
John
Ahmed
Sangha
Daniel
Ann

所以这里我有 6 个输入。但他们不提供输入的数量。所以我不能使用for loopwhile loop 来接受这个输入。因为我不知道我应该做多少次迭代。所以我必须接受输入直到结束。但这不是来自文件的输入。所以我也不能使用EOF。此输入来自 STDIN。那么我怎样才能接受这种输入并将其存储在一个数组中呢?另外我不知道应该在数组中创建多少元素。因为我不知道有多少输入。 (不同的测试用例可能包含不同数量的输入)。我该如何解决这种问题?

非常感谢您的帮助!

【问题讨论】:

  • 使用fgets() 用于C 或std::getline() 用于C++ 的while 循环。
  • 将问题分解为更小的问题。为什么它必须是一个数组,而不是其他容器?链表可以解决这个问题,它是每个程序员都应该知道如何创建的东西。如果你在编译时就知道元素的数量,你能解决整个问题吗?如果您在输入之前的运行时就知道它会怎样?你知道如何放大数组吗?
  • @tadman 我会将其更改为 c++。感谢您的告知。
  • 在 C++ 中,您拥有像 std::string 这样的工具,可以与 std::vectorstd::list 结合使用,而在 C 中,您会得到 nothing。您几乎必须自己制作所有东西
  • 在 C++ 中,您的输入流将无法通过 if 检查您是否到达流的末尾。您基本上可以使用while (input) 并使用getline() 阅读。将其与push_back 组合成std::vector,您就差不多完成了。

标签: c++ user-input stdin


【解决方案1】:

你应该可以使用EOF,因为stdin 一个文件(至少在linux上)

【讨论】:

    【解决方案2】:

    此处的输入清楚地显示了显示的条目数。请注意,每个条目都在换行符上,因此,将其视为分隔符,您可以解析输入流并分离条目并获取条目数。

    C++ getline() 正是这样做的:

    istream& getline(istream& is, string& str, char delim );

    getline 的最后一个参数是可选的,因为它使用 '\n' 作为默认值。

    如果您想以原始方式执行此操作,您可以设置一个文件指针并对 '\n' 进行前瞻,并将其之前的所有内容读入变量数组(向量)的新项中...重复执行此操作直到你到达流(或文件流)的EOF

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多