• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Refaktoryzacja kodu c++

Cloud VPS
0 głosów
852 wizyt
pytanie zadane 16 sierpnia 2016 w C i C++ przez Informatyk# Obywatel (1,060 p.)
edycja 16 sierpnia 2016 przez Patrycjerz

Witajcie. Cały ten program służy do tego, aby wyświetlał liczbę słów zaczynających się od samogłosek, spółgłosek lub od innych. Jak mógłbym ten kod skrócić?

#include <iostream>

using namespace std;
int main()
{
    cout<<"Podaj slowa, pojedyncze q konczy:\n";
    string slowa;
    getline(cin,slowa);
    int i = 0;
    int inne = 0;
    int samogloski = 0;
    int spolgloski = 0;
    if (isalpha(slowa[0]))
    {
        switch (slowa [i])
                {
                    case 'a':
                    case 'e':
                    case 'i':
                    case 'o':
                    case 'u':
                    case 'y':
                        samogloski++;
                        i++;
                    break;
                    default:
                        spolgloski++;
                        i++;
                        break;


                }
    }
    else
        inne++;

   while (slowa[i]!='\0')
    {
        if(slowa[i+1]=='q' && slowa[i]==' ')
            break;
        else if (slowa[i]==' ')
        {
         if (isalpha(slowa[i+1]))
            {
                switch (slowa [i+1])
                {
                    case 'a':
                    case 'e':
                    case 'i':
                    case 'o':
                    case 'u':
                    case 'y':
                        samogloski++;
                        i++;
                    break;
                    default:
                        spolgloski++;
                        i++;
                        break;


                }
            }
        else
            {
                cout<<slowa[i];
                inne++;
                i++;
            }

        }


        i++;


        }
    cout<<spolgloski<<" spolglosek\n";
    cout<<samogloski<<" samoglosek\n";
    cout<<inne<<" innych\n";
    }

1 odpowiedź

0 głosów
odpowiedź 16 sierpnia 2016 przez Porcupine Nałogowiec (31,560 p.)
wybrane 16 sierpnia 2016 przez Informatyk#
 
Najlepsza

Na pewno dobrym pomysłem będzie zrobienie funkcji:

bool isVowel(char c) {
     return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y';
}

I wtedy te wszystkie case'y zastępujesz if'ami w stylu if (isVowel(slowa[i+1]) ... 

komentarz 16 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
|error: a function-definition is not allowed here before '{' token|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

mam błąd kompilacji :/
komentarz 16 sierpnia 2016 przez Porcupine Nałogowiec (31,560 p.)
A gdzie wkleiłeś tą funkcję? W C++ nie możesz robić funkcji wewnątrz funkcji - funkcja isVowel() musi być po za funkcją main()
komentarz 16 sierpnia 2016 przez Informatyk# Obywatel (1,060 p.)
Dzięki za odpowiedź. Już wszystko działa :)

Podobne pytania

0 głosów
2 odpowiedzi 9,116 wizyt
pytanie zadane 4 października 2015 w C i C++ przez Kubix Nowicjusz (120 p.)
0 głosów
5 odpowiedzi 832 wizyt
pytanie zadane 17 stycznia 2016 w C i C++ przez Informatyk# Obywatel (1,060 p.)
0 głosów
0 odpowiedzi 594 wizyt

93,487 zapytań

142,423 odpowiedzi

322,773 komentarzy

62,909 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...