2016-10-29 6 views
-4

Я изучаю C++. Что-то в моем коде не работает, но я не понимаю, в чем проблема. Я думаю, это инкремент массива stat, который подсчитывает, сколько чисел повторяется в массиве T ... Как это исправить? Возможно, это неправильный синтаксис stat [elt] ++?C++ Изучение количества чисел, повторяющихся в массиве

#include <iostream> 
#include <cctype> 
#include <ctime> 
#include <cstdlib> 
#include <string> 
#include <sstream> 
using namespace std; 


int anneeSecu(int T[12][13], int j){ 
// here I join the 2 numbers of tab (they refer to the year of birth) and I add the number 20, because I know that they were born all after 2000 
     int a = T[j][1]; 
     int b = T[j][2]; 

     ostringstream oss; 
     oss << "20" << a << b; 
     istringstream iss(oss.str()); 
     int ab; 
     iss >> ab; 
     int annee = ab; 
     cout << annee << endl; 
     return annee; 
    } 




int main(){ 
    int T[12][13]={ {1,1,2,0,2,3,7,1,9,8,2,0,5}, 
        {2,1,3,0,5,8,9,9,0,8,1,0,2}, 
        {2,1,6,0,8,1,9,2,6,5,4,8,7}, 
        {2,1,5,0,6,5,6,3,4,6,0,6,7}, 
        {1,1,5,0,6,5,6,3,4,6,0,7,5}, 
        {2,1,5,0,2,5,6,3,4,6,0,6,7}, 
        {2,1,5,0,6,2,9,1,4,7,1,6,3}, 
        {2,1,4,0,6,2,2,1,4,7,1,6,3}, 
        {2,1,4,0,9,3,5,1,4,7,1,6,3}, 
        {1,1,1,1,2,5,6,1,7,5,0,0,7}, 
        {1,1,1,0,9,5,6,1,7,5,1,0,7}, 
        {2,1,4,1,0,3,5,1,4,7,0,2,2} }; 


    int stat[6]={0,0,0,0,0,0}; 
    for (int i=0;i<12;i++){ 
     int l=anneeSecu(T,i); 
     **stat[l]++;** 
    } 

return 0; 
} 

выход и замораживание CMD

2012 

Process returned -1073741819 (0xC0000005) execution time : 1.764 s 
Press any key to continue. 

РЕШЕНИЕ Обнаружена ошибка в стат [л] ++ (потому что он принимает число от 0 до 5 только ...) коррекции => стат [л-2011] ++

+0

Спасибо за сообщение. @ Биффен ... Теперь ты можешь мне помочь? – Jurafsky

ответ

1

Существует проблема с этим фрагментом кода:

int l=anneeSecu(T,i); 
stat[l]++; 

Потому что anneeSecu швов, чтобы вернуть число больше, чем длина массива. l должно быть в пределах от 0 до 5, или ваша программа выйдет из строя.

+0

Не понимаю. Как я могу писать, чтобы, например, иметь. для 2015 года такой код? int l = 2015 (в результате аннексирования Secu); stat [2015] ++; (который подсчитывает, сколько раз 2015 в массиве) – Jurafsky

+2

Поскольку вы, кажется, знаете, что все между 2011 и 2016 годами, вы можете просто сделать 'stat [l-2011]' вместо 'stat [l]'. Чистым решением будет вычисление наименьшего года в массиве и смещение всего на это значение. – Zouch

+0

@ Zouch ahhh !!! Теперь я понимаю ... Я думал, что stat будет действовать так, как если бы это было написано как «stat [year] = counter of years. Я всегда создавал такой массив в Perl ... но никогда не делал в C++ и мне не знаю, можно ли это сделать и как. Спасибо за помощь. – Jurafsky