Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 给定一系列数字,报告重复了多少次_C++ - Fatal编程技术网

C++ 给定一系列数字,报告重复了多少次

C++ 给定一系列数字,报告重复了多少次,c++,C++,比如说 1 1 1 1 2 3 3 4 5 5 5 1 repeated 3 times, 3 repeated 1 time, 5 repeated 2 times 这是代码,但它有一些问题 int i, k, m, number, number_prev, e; cout << "Insert how many numbers: "; cin >> m; cout << "insert number"; cin

比如说

1 1 1 1 2 3 3 4 5 5 5

1 repeated 3 times,
3 repeated 1 time,
5 repeated 2 times
这是代码,但它有一些问题

int i, k, m, number, number_prev, e;
cout << "Insert how many numbers: ";
cin >> m;
cout << "insert number";
cin >> number;
number_prev = number;
int num_rep[m]; //array of repeated numbers
int cant_rep[m]; // array of correspondent number of repetitions
e = 0;

for (i=1; i<m; i++) 
{
    cin >> number; 
    if (number == number_prev)
    {
        if (number == num_rep[e-1])
            cant_rep[e-1]++;
        else
        {
            num_rep[e] = number;
            cant_rep[e] = e + 1;
            e++;
        }
    }
    else
        e = 0;
    number_prev = number;
}

for (k = 0; k < e; k++)
    cout << "\nnumber " << num_rep[k] << " repeated " << cant_rep[k] << " times.\n";
inti,k,m,number,number\u prev,e;
cout>m;
数量;
数字_prev=数字;
int num_rep[m]//重复数数组
int cant_rep[m];//对应重复次数的数组
e=0;
对于(i=1;i>number;
if(number==number\u prev)
{
if(number==num_rep[e-1])
不能代表[e-1]++;
其他的
{
num_rep[e]=数字;
不能代表[e]=e+1;
e++;
}
}
其他的
e=0;
数字_prev=数字;
}
对于(k=0;kstd::vector

<>代码看起来像是C风格C++程序:

1.不需要在块的开头声明变量,使用前先声明,可读性更强

2.使用
STL
类型,如
std::vector
,可以在这样的程序中为您节省很多麻烦

在这里,m只有在运行时才知道,数组大小必须在编译时知道。请改用
std::vector

<>代码看起来像是C风格C++程序:

1.不需要在块的开头声明变量,使用前先声明,可读性更强


2.使用
STL
类型,如
std::vector
,可以在这样的程序中为您节省很多麻烦。

您应该学习算法和数据结构。这使您的代码更简单。只需使用关联容器就可以保存对

a number --> how many times it repeats
可以充分简化您的程序

int main()
{
    std::map<int, int> map;
    int v;
    while(std::cin >> v) {
        map[v]++;
    }
    for (auto it = map.cbegin(); it != map.cend(); ++it) {
        if (it->second > 1) {
            std::cout << it->first << " repeats " << it->second - 1 << " times\n";
        }
    }
}
您可以使用
[]
运算符引用值

这与通常的数组类似,只是使用键代替索引

还可以使用迭代器检查映射中存储的所有键值对

正如我指出的,map保存键值对

和标准C++库<代码>结构STD::配对< /代码>用于表示对。 它有

first
second
成员,它们表示成对存储的第一个和第二个值

对于map,
first
是一个键,
second
是一个值

std::map<int,       int> map;
         ^^^        ^^^
          |           |
         key type    value type
同样,我们将一个数字存储为一个键,以及它在一个值中重复多少次

然后,我们读取用户输入并增加给定键的值


之后,我们只需检查存储在地图中的所有元素并打印它们。

您应该学习算法和数据结构。这使您的代码更简单。只需使用关联容器即可保存这些元素对

a number --> how many times it repeats
可以充分简化您的程序

int main()
{
    std::map<int, int> map;
    int v;
    while(std::cin >> v) {
        map[v]++;
    }
    for (auto it = map.cbegin(); it != map.cend(); ++it) {
        if (it->second > 1) {
            std::cout << it->first << " repeats " << it->second - 1 << " times\n";
        }
    }
}
您可以使用
[]
运算符引用值

这与通常的数组类似,只是使用键代替索引

还可以使用迭代器检查映射中存储的所有键值对

正如我指出的,map保存键值对

和标准C++库<代码>结构STD::配对< /代码>用于表示对。 它有

first
second
成员,它们表示成对存储的第一个和第二个值

对于map,
first
是一个键,
second
是一个值

std::map<int,       int> map;
         ^^^        ^^^
          |           |
         key type    value type
同样,我们将一个数字存储为一个键,以及它在一个值中重复多少次

然后,我们读取用户输入并增加给定键的值

之后,我们只需检查存储在地图中的所有元素并打印它们

  • 您会说“插入m个数字”,但(i=1;i>m;)的
    ,因为它可以是零或负
  • 您会说“插入m个数字”,但(i=1;i>m;)的
    ,因为它可以是零或负

  • 请告诉我们C++中没有可变长度数组的“麻烦”。请使用<代码> STD::向量< /代码>请告诉我们什么是“麻烦”在C++中没有可变长度数组。使用<代码> STD::vector < /代码> 1。在for循环之前有一个CIN >编号,所以总数是m个2。谢谢,但是稍后我会细化代码,首先我想它运行右边。在for循环之前有一个CIN >编号,所以总数是M个数字2。谢谢,但是稍后我会细化代码。首先,我希望它能正常工作,就像一个符咒,谢谢,唯一的问题是我不明白它,我从来没有用过maps@RihardMarius,我试着用breaf解释。希望这有帮助,但是你应该读一些书来了解细节。工作很有魅力,谢谢,唯一的问题是我不懂,我从来没有用过maps@RihardMarius,我尝试希望这对你有所帮助,不过你应该读一些书来了解细节。