有没有一种方法可以接受数字数组的输入而不接受垃圾值?

时间:2019-08-05 18:01:49

标签: c++ arrays vector

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 4 .........(直到第99个循环)

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

1 个答案:

答案 0 :(得分:1)

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

这是一个演示程序。

#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