Witam, mam kod sprawdzający poprawność wpisanego ciągu znaków. Zasada jest, że ciąg znaków nie może się zaczynać od samogłoski ale co drugą literą musi ona być. Teraz chi mi o tekst na początku mówiący użytkownikowi co ma zrobić czyli: "Wisz ciąg znaków zaczynający się bla bla bla" Oraz aby użytkownik miał na końcu programu do wyboru np 0-zakończ program. 1-wpisz ponownie ciąg znaków. i po wciśnięciu jedynki program leci od nowa a za 0 się wyłącza. Ważne też są komentarze. muszę wiedzieć za co odpowiada dana część kodu na wypadek gdyby mnie zapytał. Program w załaczniku
" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2025 KUDO.TIPS - All rights reserved.
Mogłeś chociaż ten mój program z pastebin skopiować; zachowałoby się formatowanie kodu...
Proszę:
http://pastebin.com/6sr1eUxC
(wersja bez komentarzy; w poprzedniej był memory leak).
http://pastebin.com/DUEzBDjR
(wesja z komentarzami)
Kod:
#include <cstdio> //dzięki temu mamy dostęp do kilku funkcji, jak np.printf/scanf
#define MAX_LENGTH 512 //maksymalna długość wpisanego ciągu znaków (na tyle inicjujemy tablicę)
char* TEXT0 = "Wpisz ciag znakow zaczynajacy sie spolgloska, ale co druga litera musi byc samogloska: ";
char* TEXT1 = "Wpisany wyraz jest poprawny! \n";
char* TEXT2 = "Wpisany wyraz jest bledny! \n";
char* TEXT3 = "Nacisnij 0, aby zakonczyc program, nacisnij 1 aby wpisac kolejny wyraz... ";
char Vowels[] = {"eyuioa"}; //samogłoski
bool isVowel(char c) //funkcja sprawdza czy znak podany w parametrze jest samogłoską
{
for (int i = 0; i<sizeof(Vowels)/sizeof(char); i++) //sizeof(Vowels)/sizeof(char) to liczba elementów w tablicy z samogłoskami; iterujemy po całej
if (Vowels[i] == c) //jeżeli odnaleźliśmy samogłoskę,
return true; //zwracamy true i wychodzimy z funkcji
return false; //a jeżeli pętla doszła do końca, to znak podany w parametrze nie jest samogłoską
}
bool check(char* string, int length) //funkcja sprawdza, czy podany wyraz jest poprawny; pierwszy parametr to wskaźnik na ciąg znaków, a drugi to długość tego ciągu
{
if (isVowel(string[0])) //jeżeil pierwszy znak jest samogłoską,
return false; //zwracamy false i wychodzimy z funkcji
for (int i = 1; i<length; i+=2) //iterujemy po co drugim znaku
if (!isVowel(string[i])) //jeżeli nie jest on samogłoską,
return false; //zwracamy false i wychodzimy z funkcji
return true; //jeżeli program dotarł tutaj, wyraz jest poprawny
}
void prog() //główna część programu (możnaby to wszystko zrobić w main(), ale standard C++ zabrania rekurencyjnego wywoływania main'a).
{
char* string = new char[MAX_LENGTH]; //alokujemy tablicę na stercie (a nie na stosie, jakby to było w przypadku deklaracji: char string[])
int length; //długość wyrazu
for (int i = 0; i<MAX_LENGTH; i++) //wypełniamy tablicę znakiem ASCII 0 (\0), na wszelki wypadek oraz aby można było sprawdzić długość
string[i] = '\0';
printf("%s", TEXT0); //wyświetlamy tekst
scanf("%s", &string[0]); //wczytujemy ciąg znaków
for (int i = 0; i<MAX_LENGTH; i++) //iterujemy po całym stringu w poszukiwaniu znaku ASCII 0, dzięki temu poznamy długość wyrazu
if (string[i] == '\0') //jeżeli odnaleźliśmy,
{
length = i; //ustawiamy długość wyrazu
break; //oraz wychodzimy z pętli
}
if (check(string, length)) //sprawdzamy poprawość wyrazu
printf(TEXT1); else //i wyświetlamy
printf(TEXT2); //odpowiedni tekst
printf(TEXT3); //tekst z prośbą o wybranie opcji
int opt;
scanf("%i", &opt); //wczytujemy opcję (int)
switch (opt) //sprawdzamy opcję
{
case 1: printf("\n"); prog(); break; //jeżeli jest równa 1, przechodzimy linię do przodu oraz wywołujemy samego-siebie (funkcję prog())
}
delete string; //czyścimy miejsce na stercie
}
int main()
{
prog(); //skaczemy do funkcji prog()
return 0; //standard C++ nakazuje zwrócić jakąś wartość z main'a() (jak z resztą, z każdej funkcji coś zwracającej)
}