【问题标题】:Is there a way in which I can accept an input of array of numbers without accepting garbage values? [closed]有没有一种方法可以在不接受垃圾值的情况下接受数字数组的输入? [关闭]
【发布时间】:2019-08-05 18:01:49
【问题描述】:
Input: 30 30 30 40 40 50 50 4 4 4 4
output: 3 30 2 40 2 50 4 4

我必须接受这些整数并在计数旁边显示每个唯一数字的计数。

老实说,我不知道在输入的最后一个整数 4 之前接受什么条件,并且不接受无限或一些垃圾值。因为所有测试用例都没有与输入相同数量的值。请解释我需要使用什么函数/逻辑来接受有限数量的整数。

我使用了一个 for 循环,它接受并在向量中存储值 99 次,因为问题说我可以接受的最大整数数是 99。但是对于上述测试用例,接受了 11 个必需的整数,并且其余 87 个是垃圾/最后一个整数值...

它接受了 30 30 30 40 40 50 50 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 .........(直到第 99 个循环)

(如果可以的话,我会附上我所做的截图。我没有这样做是因为,1)我被要求在比赛中编写这个代码,所以我不记得我们当时的确切问题不允许将我们的粗糙床单带出去。 2)我无法做出体面的尝试来解决它,因为我什至不知道如何在不接受垃圾值的情况下接受整数。抱歉,不确定!)

【问题讨论】:

  • 一般输入为“signaled”。如果这是针对编程挑战,则流将进入“输入结束”状态,这将为您停止输入循环。看看这个问答对了解该技术以及会发生什么:stackoverflow.com/questions/50608176/…
  • 在 C++ 中有多种方法可以验证输入。至少展示你已经尝试过的一些努力以及失败的原因。
  • 定义随机值你认为它适用于你的应用程序。
  • 如何判断一个值是否随机?
  • 因为所有测试用例都没有与输入相同数量的值。这就是您需要std::vector 而不是固定大小的数组。

标签: c++ arrays vector


【解决方案1】:

您可以读取字符串中的数字,然后使用标头<sstream> 中声明的标准字符串流std::istringstream 从字符串中提取每个数字。

这是一个演示程序。

#include <iostream>
#include <string>
#include <map>
#include <sstream>

int main()
{
    std::string input;

    std::cout << "input: ";
    std::getline( std::cin, input, '\n' );

    std::map<int, size_t> m;

    int value;

    for ( std::istringstream is( input ); is >> value; )
    {
        ++m[value];
    }

    std::cout << "output: ";
    for ( const auto &p : m ) std::cout << p.first << ' ' << p.second << ' ';
    std::cout << '\n';
}

它的输出是

input: 30 30 30 40 40 50 50 4 4 4 4
output: 4 4 30 3 40 2 50 2

【讨论】:

  • 是的!这正是我所需要的!我不知道 std 字符串流标头及其功能。非常感谢@Vlad!但是你能解释一下'const auto'在这里做什么吗?我不是很明白..
猜你喜欢
  • 2011-04-13
  • 2013-04-10
  • 2011-09-30
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 2014-04-07
相关资源
最近更新 更多