Răspuns :
Citesti sirul de prea multe ori; il citesti si in while si o data in afara lui while.
N-ar trebui sa citesti cu "while" prin stdin, mai ales fara break, pentru ca n-ai cum sa-l opresti.
Pe 'n' il declari in afara structurii repetitive, dar nu-l mai modifici in structura repetitiva.
Nu ai initializat 'sir'. O sa fie plin cu numere random, evident ca programul n-o sa functioneze.
Nu-i nevoie sa folosesti "return 0" cand ai terminat cu ultimul for, poate vrei sa mai faca ceva programul, foloseste "break". Daca nu stii ce face break, practic "sparge" (iese) din structura repetitiva in care se afla. Daca se afla in mai multe iese din cea interioara.
Quality of life:
'sir' e mult prea mare
N-ar trebui sa folosesti variabile globale decat daca ai un motiv bine intemeiat (in cazul de fata n-ai)
Poftim codul tau, putin modificat si functional:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int sir[256] = {0};
int i, maxim = 0, numRepetitions;
cout << "Introdu numarul de linii pe care vrei sa le citesti: ";
cin >> numRepetitions >> std::ws;
for (int repetitions = 0; repetitions < numRepetitions; ++repetitions)
{
char s[256];
cin.getline(s, 256);
int n = strlen(s);
for (i = 0; i < n; ++i)
{
if (s[i] >= 'a' && s[i] <= 'z')
{
sir[s[i]]++;
maxim = max(maxim, sir[s[i]]);
}
}
}
for (int i = int('a'); i <= (int) 'z'; ++i)
{
if (sir[i] == maxim)
{
cout << (char) i << endl;
break;
}
}
return 0;
}
Acelasi cod, mai eficient si mai curat:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const int LETTERS = 26;
int apparitions[LETTERS] = {0};
int maxApparitions = 0, numRepetitions;
cout << "Introdu numarul de linii pe care vrei sa le citesti: ";
cin >> numRepetitions >> std::ws;
for (int repetition = 0; repetition < numRepetitions; ++repetition)
{
char line[256];
cin.getline(line, sizeof(line));
int n = strlen(line);
for (int chrIndex = 0; chrIndex < n; ++chrIndex)
{
if (line[chrIndex] >= 'a' && line[chrIndex] <= 'z')
{
++apparitions[line[chrIndex] - 97]; // Alphabet position of character, starting from 'a' = 0.
}
}
}
for (int apparition : apparitions)
maxApparitions = max(apparition, maxApparitions);
for (int letterIndex = 0; letterIndex < LETTERS; ++letterIndex)
{
int alphabetPosition = letterIndex + 97; // Alphabet position of character, starting from 'a' = 0.
if (apparitions[letterIndex] == maxApparitions)
{
cout << (char) (alphabetPosition) << endl;
break;
}
}
return 0;
}