Flytta ut getline-kommando till main() utanför funktion
Hej,
Jag fick en anmärkning på att jag måste flytta ut den rad kod som ligger i funktionsdefinitionen för funktionen berakna_histogram_abs() till main ().
Hur gör jag detta? Jag behöver skicka med variabeln 'rad' till funktionen berakna_histogram_abs()
Tacksam för svar, se kod nedan!
//
// Programskal till obluppg4 - deluppgift A
//
//--------------------------------------------------------
// Hanterar fallet med 26 bokstäver A-Z
//Komplettera med två egna funktioner
//Huvudprogrammet innehåller endast anrop för att läsa in textrad från
//tangentbordet och anrop på de två funktionerna
//--------------------------------------------------------
#include <iostream>
#include <string>
#include <cctype>
#include <cmath>
using namespace std;
// Använd gärna denna globala konstant i programmet
// i stället för värdet 26
const int ANTAL_BOKSTAVER = 26; //A-Z
// Globala variabler är ej tillåtna
//--------------------------------------------------------
// Funktionsdeklarationer:
// Använd exakt de funktionsnamn som finns nedan
// Funktionen berakna_histogram_abs
int berakna_histogram_abs();
// Funktionen skriv_histogram_abs
int skriv_histogram_abs();
//--------------------------------------------------------
// Huvudprogram:
int main()
{
// // Deklarera variabler
// Anropa funktionen berakna_histogram_abs som beräknar histogrammet
// och antalet bokstäver.
berakna_histogram_abs();
// Anropa funktionen skriv_histogram_abs som skriver ut histogrammet
skriv_histogram_abs();
return 0;
}
//--------------------------------------------------------
// Funktionsdefinitioner:
int berakna_histogram_abs()
{
string rad;
cout<<"Mata in en rad text: " << endl;
getline(cin,rad);
cout << "\nResultat för bokstäverna A-Z " << endl;
cout << "\nTotalt angivna tecken: " << rad.size() << endl;
int f[ANTAL_BOKSTAVER];
//Nollställ f:
for (int i=0; i<ANTAL_BOKSTAVER; i++)
f[i] = 0;
for (int i=0; i< (int) rad.length(); i++)
{
int index;
if (rad.at(i)>='a' && rad.at(i)<='z')
{
index = rad.at(i) - 'a'; f[index]++;
}
if (rad.at(i)>='A' && rad.at(i)<='Z')
{
index = rad.at(i) - 'A'; f[index]++;
}
}
//cout << f[ANTAL_BOKSTAVER] << endl;
return 0;
}
int skriv_histogram_abs()
{
//Skriv ut frekvensen för de bokstäver som finns
int f[ANTAL_BOKSTAVER];
cout<<"\nBokstavsfördelning: \n";
for (int i=0; i<ANTAL_BOKSTAVER; i++)
{
char b = char (i+'A');
cout << b << ": " << "\t" << f[i] <<endl;
}
return 0;
}
shiela skrev:Hej,
Jag fick en anmärkning på att jag måste flytta ut den rad kod som ligger i funktionsdefinitionen för funktionen berakna_histogram_abs() till main ().
Hur gör jag detta? Jag behöver skicka med variabeln 'rad' till funktionen berakna_histogram_abs()
Tacksam för svar, se kod nedan!
//
// Programskal till obluppg4 - deluppgift A
//
//--------------------------------------------------------
// Hanterar fallet med 26 bokstäver A-Z
//Komplettera med två egna funktioner
//Huvudprogrammet innehåller endast anrop för att läsa in textrad från
//tangentbordet och anrop på de två funktionerna
//--------------------------------------------------------
#include <iostream>#include <string>
#include <cctype>
#include <cmath>
using namespace std;
// Använd gärna denna globala konstant i programmet
// i stället för värdet 26
const int ANTAL_BOKSTAVER = 26; //A-Z
// Globala variabler är ej tillåtna
//--------------------------------------------------------// Funktionsdeklarationer:
// Använd exakt de funktionsnamn som finns nedan
// Funktionen berakna_histogram_absint berakna_histogram_abs();
// Funktionen skriv_histogram_absint skriv_histogram_abs();
//--------------------------------------------------------
// Huvudprogram:
int main(){
// // Deklarera variabler
// Anropa funktionen berakna_histogram_abs som beräknar histogrammet
// och antalet bokstäver.
berakna_histogram_abs();
// Anropa funktionen skriv_histogram_abs som skriver ut histogrammet
skriv_histogram_abs();
return 0;
}
//--------------------------------------------------------
// Funktionsdefinitioner:
int berakna_histogram_abs(){
string rad;
cout<<"Mata in en rad text: " << endl;
getline(cin,rad);
cout << "\nResultat för bokstäverna A-Z " << endl;
cout << "\nTotalt angivna tecken: " << rad.size() << endl;
int f[ANTAL_BOKSTAVER];
//Nollställ f:for (int i=0; i<ANTAL_BOKSTAVER; i++)
f[i] = 0;
for (int i=0; i< (int) rad.length(); i++)
{
int index;
if (rad.at(i)>='a' && rad.at(i)<='z')
{
index = rad.at(i) - 'a'; f[index]++;
}
if (rad.at(i)>='A' && rad.at(i)<='Z')
{
index = rad.at(i) - 'A'; f[index]++;
}
}
//cout << f[ANTAL_BOKSTAVER] << endl;
return 0;
}
int skriv_histogram_abs(){
//Skriv ut frekvensen för de bokstäver som finns
int f[ANTAL_BOKSTAVER];
cout<<"\nBokstavsfördelning: \n";
for (int i=0; i<ANTAL_BOKSTAVER; i++)
{
char b = char (i+'A');
cout << b << ": " << "\t" << f[i] <<endl;
}
return 0;
}
FÖTYDLIGANDE:
Jag fick en anmärkning på att jag måste flytta ut den rad kod som tar emot en rad text med kommandot getline från användaren. Raden som tar emot textraden 'rad' från användaren ligger just nu i funktionsdefinitionen för funktionen berakna_histogram_abs() och måste flyttas till main ().
Jag löste det! :)