Rozpoznawanie samoglosek spolglosek i innych

0

Witam,
Były już tematy o rozpoznawaniu pojedynczych samogłosek z tekstu, ja jednak mam takie zadanie (przerabiam podręcznik).

Cytuję..
Napisz program wczytujący dane wejściowe aż do wpisania pojedynczej litery q. Program ma pokazać liczbę słów zaczynajacych się od samogłosek, od spółgłosek i niezaliczonych do żadnej z tych kategorii.

Tak na szybko się za to porwałem bo chcę już przejść do następnego rozdziału, ale ..

#include <iostream>
#include <cctype>
int main(){
  using std::cin;
  using std::cout;
  using std::endl;
  
  char znak;
  int samoG=0, spoL=0, inne=0;
  cin.get(znak);	//pobieram pierwszy znak
  while(znak != 'q'){
    if(isalpha(znak)){
      switch(znak){
	case 'a':
	case 'e':
	case 'i':
	case 'o':
	case 'u':
	case 'y':
	  samoG++;
	  break;
	default: spoL++;
      }
    }
    if(!isspace(znak) && znak != '\n')
      inne++;
    while(!isspace(znak))
      cin.get(znak);
    cin.get(znak);
  }
  cout<<samoG<<" "<<spoL<<" "<<inne<<endl;
  return 0;
} 

Samogłoski i spółgłoski działają zgodnie z założeniem, lecz "wyraz" (ciąg znaków aż do białego znaku zaczynajacy się od znaku innego niż litera) działa nieprawidłowo. W zdaniach zbyt dużo ich nalicza. Błąd jest tu:

 if(!isspace(znak) && znak != '\n')
      inne++;

Przykładowo po wpisaniu:

andrzej ma psa o imieniu yetti. ma juz 5 lat. q

wynikiem jest 4 5 10
Może ma ktoś pomysł jak to naprawić? :)

1

No do inne dolicza jeśli nie jest znakiem konca linii ani spacją, a literą może być wg tego warunku, jeszcze dorzuć do if-a warunek że nie jest literą.

0

Dzięki wielkie!
A jak tak kombinowałem, do switcha dopisywałem spółgłoski nawet :P

1

A najlepiej dopisz przed tego if-a else i problem z głowy, a i nieco wydajniej będzie, bo nie dublujesz warunku.

0
#include <iostream>
#include <cctype>
int main(){
  using std::cin;
  using std::cout;
  using std::endl;
  
  char znak;
  int samoG=0, spoL=0, inne=0;
  cin.get(znak);	//pobieram pierwszy znak
  while(znak != 'q'){
    if(isalpha(znak)){
      switch(znak){
	case 'a':
	case 'e':
	case 'i':
	case 'o':
	case 'u':
	case 'y':
	  samoG++;
	  break;
	default: spoL++;
      }
    }
    else if(!isspace(znak) && znak != '\n' && !isalpha(znak))
      inne++;
    while(!isspace(znak))
      cin.get(znak);
    cin.get(znak);
  }
  cout<<samoG<<" "<<spoL<<" "<<inne<<endl;
  return 0;
}

i git :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1