Witam wszystkich,
znalazłem na forum podobny problem lecz trochę jednak się różni sposób w jaki chcę go rozwiązać.
Jest to zadanie 7. z ćwiczeń na koniec rozdziału 6. i pochodzi ze "Skoły Programowania", S.Prata.
Treść:
"Napisz program wczytujący dane wejściowe aż do wpisania pojedynczej litery q. Dalej program ma pokazać liczbę słów zaczynających się od samogłosek, zaczynających się od spółgłosek i niezaliczonych do żadnej kategorii. Jeden sposób realizacji tego zadania to użycie funkcji isalpha() do wyróżnienia słów zaczynających się od liter i innych słów, a następnie użycie if lub switch do oddzielna samogłosek od spółgłosek."
Postanowiłem zrobić to za pomocą instrukcji switch.
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
string napis;
int samogloski=0;
int spolgloski=0;
int inne=0;
cout << "Podawaj slowa (pojedyncze 'q' lub 'Q' konczy): ";
cin >> napis;
while ((napis!="q") && (napis!="Q"))
{
if (isalpha(napis[0]))
{
switch (napis[0])
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
case 'y':
case 'Y': samogloski++;
break;
default: spolgloski++;
break;
}
}
else inne++;
cout << "";
cin >> napis;
}
cout << spolgloski << " slow zaczyna sie od spolglosek." << endl;
cout << samogloski << " slow zaczyna sie od samoglosek." << endl;
cout << inne << " slow nie zalicza sie do zadnej z tych kategorii." << endl;
return 0;
}
Po skompilowaniiu tego programu wszystko działa jak nalezy. Program konczy przetwarzanie gdy dojdzie do 'q' lub 'Q', slowa sa zliaczne prawidłowo. Jednak troszkę nie rozumiem dlaczego linie kodu 43 i 44, tj. cout << ""; cin >> napis; są warunkiem prawidłowego wyświetlania wyniku? Wiem, że ma to związek z obiektem string i jak dane wejściowe są przetwarzane jednak nie potrafię tego do końca sobie uporzadkować.
Jeśli zmodyfikuję kod na następujący:
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
string napis;
int samogloski=0;
int spolgloski=0;
int inne=0;
cout << "Podawaj slowa (pojedyncze 'q' lub 'Q' konczy): ";
while ((cin>>napis) && (napis!="q") && (napis!="Q"))
{
if (isalpha(napis[0]))
{
switch (napis[0])
{
case 'a':
case 'A':
case 'e':
case 'E':
case 'i':
case 'I':
case 'o':
case 'O':
case 'u':
case 'U':
case 'y':
case 'Y': samogloski++;
break;
default: spolgloski++;
break;
}
}
else inne++;
cout << spolgloski << " slow zaczyna sie od spolglosek." << endl;
cout << samogloski << " slow zaczyna sie od samoglosek." << endl;
cout << inne << " slow nie zalicza sie do zadnej z tych kategorii." << endl;
return 0;
}
To cały program kompiluje sie tak jak powinien. Czy ktos moze mi to wyjasnic. Wertowałem książkę i tak jak mowilem, wiem ogolnie, iż ma to związek z obiektem cin lecz nie potrafie dalej tego rozwinąć, a chcę.
Dziękuję z góry za poświęcony czas, pozdrawiam!