Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- using namespace std;
- const int MAX_LEN = 128;
- /*
- int str_len(char * s)
- Wlasna implementacja funkcji wyznaczajacej dlugosc
- napisu liczona w znakach
- Parametry:
- char * s -- tablica zawierajaca napis, ktorego
- dlugosc jest wyznaczana
- Rezultat:
- Dlugosc napisu liczona w znakach
- */
- int str_len(char * s)
- {
- int Dlugosc = 0;
- while (*s)
- {
- s++;
- Dlugosc++;
- }
- return Dlugosc;
- }
- /*
- int lwr_str_cnt(char * s)
- Wyznacza liczbe malych liter w napisie s
- Parametry:
- char s[] -- tablica zawierajaca napis
- Rezultat:
- Liczba malych liter w napisie s
- */
- int lwr_str_cnt(char * s)
- {
- int Ilosc=0;
- while (*s)
- {
- if(*s >= 'a' && *s <= 'z')
- {
- Ilosc++;
- }
- s++;
- }
- return Ilosc;
- }
- /*
- int upr_str_cnt(char * s)
- Wyznacza liczbe duzych liter w napisie s
- Parametry:
- char * s -- tablica zawierajaca napis
- Rezultat:
- Liczba duzych liter w napisie s
- */
- int upr_str_cnt(char * s)
- {
- int Ilosc=0;
- while (*s)
- {
- if(*s >= 'A' && *s <= 'Z')
- {
- Ilosc++;
- }
- s++;
- }
- return Ilosc;
- }
- /*
- int dgt_str_cnt(char * s)
- Wyznacza liczbe cyfr w napisie s
- Parametry:
- char * s -- tablica zawierajaca napis
- Rezultat:
- Liczba cyfr w napisie s
- */
- int dgt_str_cnt(char * s)
- {
- int Ilosc=0;
- while (*s)
- {
- if(*s >= '0' && *s <= '9')
- {
- Ilosc++;
- }
- s++;
- }
- return Ilosc;
- }
- /*
- int nalpha_str_cnt(const char * s)
- Wyznacza liczbe liter i cyfr w napisie s
- Parametry:
- char * s -- tablica zawierajaca napis
- Rezultat:
- Liczba liter i cyfr w napisie s
- */
- int nalpha_str_cnt(char * s)
- {
- int Ilosc=0;
- while (*s)
- {
- if((*s >= '0' && *s<= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z'))
- {
- Ilosc++;
- }
- s++;
- }
- return Ilosc;
- }
- /*
- int chr_str_cnt(char c, char * s)
- Wyznacza liczbe wystapien znaku c w s
- Parametry:
- char c -- znak poszukiwany w napisie
- char * s -- tablica zawierajaca napis
- Rezultat:
- Liczba wystapien znaku c w napisie s
- */
- int chr_str_cnt(char c, char * s)
- {
- int Ilosc= 0;
- while (*s)
- {
- if(*s == c)
- {
- Ilosc++;
- }
- s++;
- }
- return Ilosc;
- }
- /*
- char * chr_str_pos(char c, char * s)
- Wyznacza wskazanie na pierwsze wystapienie znaku c w s
- Parametry:
- char c -- znak poszukiwany w napisie
- char * s -- tablica zawierajaca napis
- Rezultat:
- Wskazanie na pierwsze wystapienie znaku c w s lub 0 gdy znak
- nie zostal znaleziony
- */
- char * chr_str_pos(char c, char * s)
- {
- while(*s)
- {
- if(*s == c)
- {
- return s;
- }
- s++;
- }
- return 0;
- }
- /*
- char * chr_str_rpos(char c, char * s)
- Wyznacza wskazanie na ostatnie wystapienie znaku c w s
- Parametry:
- char c -- znak poszukiwany w napisie
- char * s -- tablica zawierajaca napis
- Rezultat:
- Wskazanie na ostatnie wystapienie znaku c w s lub NULL gdy znak
- nie zostal znaleziony
- */
- char * chr_str_rpos(char c, char * s)
- {
- char*Index = 0;
- int Znaleziony=0;
- while (*s)
- {
- if(*s == c)
- {
- Znaleziony++;
- Index = s; // Wziecie Addresu i przypisanie do Index. Ostatnie mozliwe znalezienie zapisane.
- }
- s++;
- }
- if (Znaleziony > 0) //Przepisanie Addresu finalnego.
- {
- return s = Index;
- }
- return 0;
- }
- /*
- char * str_rev( char * s )
- Odwraca kolejnosc znakow w tablicy s
- Parametry:
- char * s -- tablica zawierajaca napis
- Rezultat:
- Wskazanie na tablice s
- */
- char * str_rev(char * s)
- {
- int i = 0;
- char * poczatek_ptr , * koniec_ptr,ch;
- koniec_ptr = s;
- poczatek_ptr = s;
- //for (koniec_ptr += (str_len(s)-1),i = 0; i < (str_len(s)/2); i++,koniec_ptr--,poczatek_ptr++)
- for (koniec_ptr += (str_len(s)-1); koniec_ptr >= poczatek_ptr;koniec_ptr--,poczatek_ptr++)// Koniec ustawiamy na koniec, warunek jesli koniec jest wiekszy lub rowny poczatkowi.
- {
- ch = *koniec_ptr; //Przekazanie koniecowego znaku do tymczasowego char
- *koniec_ptr = *poczatek_ptr; //Przekazanie poczatkowego znaku do koncowego
- *poczatek_ptr = ch; // Przekazanie tymczaswoego char(koncowego zapisanego) do poczatkowego
- } //Przekzaywanie jest na podstawie (1-6 2-5 3-4 Koniec) lub (1-3 , 2-2 Koniec)
- return s;
- }
- /*
- int str_word_count(char * s)
- Funkcja wyznacza liczbe slow w tablicy s. Jako slowo
- rozumiemy ciag liter cyfr i znakow podkreslenia. Slowa
- moga być rozdzielane jednym lub wieloma znakami spacji, tabulacji,
- podzialu wiersza.
- Przyklad:
- Napis: "Ala _ma_ kot_ta i dwa psy"
- Liczba slow: 6
- Parametry:
- char * s -- tablica zawierajaca napis
- Rezultat:
- Liczba slow w napisie s
- */
- int str_word_count(char * s)
- {
- int Ilosc=0;
- while(*s != '\0')
- {
- if ((*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || *s == '_') //Sprawdzamy czy slowo zaczyna sie na akceptowalny znak
- {
- Ilosc++; //Jesli tak dodajemy +1 do ilosc slow
- while ((*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || *s == '_') // Przeskakujemy do nastepnego slowa
- {
- ++s;
- if (*s == '\0') // Jesli akurat natrafimy na koniec. Konczymy prace funkcji.
- {
- return Ilosc;
- }
- }
- }
- s++; //Przeskakiwanie znakow pustych lub nie akceptowalnych jako znak slowa.
- }
- return Ilosc;
- }
- int main()
- {
- char line[MAX_LEN];
- char c;
- char * pos;
- cout << "\n\nWpisz linie tekstu: ";
- cin.getline(line, MAX_LEN-1);
- cout << "\nLiczba znakow : " << str_len(line);
- cout << "\nLiczba malych liter : " << lwr_str_cnt(line);
- cout << "\nLiczba duzych liter : " << upr_str_cnt(line);
- cout << "\nLiczba cyfr : " << dgt_str_cnt(line);
- cout << "\nLiczba znakw alphanum : " << nalpha_str_cnt(line);
- cout << "\n\nPodaj pojedynczy znak: ";
- cin >> c;
- cout << "\nLiczba wystapien znaku " << c << ": " << chr_str_cnt(c, line);
- if((pos = chr_str_pos(c, line)) != 0)
- {
- cout << "\nPierwsze wystapienie znaku " << *pos << " na pozycji: " << pos - line;
- }
- else
- cout << "\nZnak " << c << " nie zostal znaleziony";
- if((pos = chr_str_rpos(c, line)) != 0)
- cout << "\nOstatnie wystapienie znaku " << *pos << " na pozycji: " << pos - line;
- else
- cout << "\nZnak " << c << " nie zostal znaleziony";
- cout << "\n\nNapis oryginalny : " << line;
- cout << "\nNapis odwrocony : " << str_rev(line);
- cout << "\nLiczba slow w napisie: " << str_word_count(line);
- cin.ignore();
- cin.get();
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment