DearOohDeer

Wskazniki_Operacje_Tablice_Znakow

Apr 25th, 2021 (edited)
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.02 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. using namespace std;
  4. const int MAX_LEN = 128;
  5.  
  6. /*
  7.   int str_len(char * s)
  8.  
  9.   Wlasna implementacja funkcji wyznaczajacej dlugosc
  10.   napisu liczona w znakach
  11.  
  12.   Parametry:
  13.     char * s -- tablica zawierajaca napis, ktorego
  14.     dlugosc jest wyznaczana
  15.  
  16.   Rezultat:
  17.     Dlugosc napisu liczona w znakach
  18. */
  19. int str_len(char * s)
  20. {
  21.     int Dlugosc = 0;
  22.     while (*s)
  23.     {
  24.         s++;
  25.         Dlugosc++;
  26.     }
  27.     return Dlugosc;
  28. }
  29.  
  30. /*
  31.   int lwr_str_cnt(char * s)
  32.  
  33.   Wyznacza liczbe malych liter w napisie s
  34.  
  35.   Parametry:
  36.     char s[] -- tablica zawierajaca napis
  37.  
  38.   Rezultat:
  39.     Liczba malych liter w napisie s
  40. */
  41. int lwr_str_cnt(char * s)
  42. {
  43.     int Ilosc=0;
  44.     while (*s)
  45.     {
  46.         if(*s >= 'a' && *s <= 'z')
  47.         {
  48.             Ilosc++;
  49.         }
  50.         s++;
  51.     }
  52.   return Ilosc;
  53. }
  54.  
  55. /*
  56.   int upr_str_cnt(char * s)
  57.  
  58.   Wyznacza liczbe duzych liter w napisie s
  59.  
  60.   Parametry:
  61.     char * s -- tablica zawierajaca napis
  62.  
  63.   Rezultat:
  64.     Liczba duzych liter w napisie s
  65. */
  66. int upr_str_cnt(char * s)
  67. {
  68.     int Ilosc=0;
  69.     while (*s)
  70.     {
  71.         if(*s >= 'A' && *s <= 'Z')
  72.         {
  73.             Ilosc++;
  74.         }
  75.         s++;
  76.     }
  77.     return Ilosc;
  78. }
  79.  
  80. /*
  81.   int dgt_str_cnt(char * s)
  82.  
  83.   Wyznacza liczbe cyfr w napisie s
  84.  
  85.   Parametry:
  86.     char * s -- tablica zawierajaca napis
  87.  
  88.   Rezultat:
  89.     Liczba cyfr w napisie s
  90. */
  91. int dgt_str_cnt(char * s)
  92. {
  93.     int Ilosc=0;
  94.     while (*s)
  95.     {
  96.         if(*s >= '0' && *s <= '9')
  97.         {
  98.             Ilosc++;
  99.         }
  100.         s++;
  101.     }
  102.     return Ilosc;
  103. }
  104. /*
  105.   int nalpha_str_cnt(const char * s)
  106.  
  107.   Wyznacza liczbe liter i cyfr w napisie s
  108.  
  109.   Parametry:
  110.     char * s -- tablica zawierajaca napis
  111.  
  112.   Rezultat:
  113.     Liczba liter i cyfr w napisie s
  114. */
  115. int nalpha_str_cnt(char * s)
  116. {
  117.     int Ilosc=0;
  118.     while (*s)
  119.     {
  120.         if((*s >= '0' && *s<= '9') || (*s >= 'A' && *s <= 'Z') ||  (*s >= 'a' && *s <= 'z'))
  121.         {
  122.             Ilosc++;
  123.         }
  124.         s++;
  125.     }
  126.     return Ilosc;
  127. }
  128. /*
  129.   int chr_str_cnt(char c, char * s)
  130.  
  131.   Wyznacza liczbe wystapien znaku c w s
  132.  
  133.   Parametry:
  134.     char c   -- znak poszukiwany w napisie
  135.     char * s -- tablica zawierajaca napis
  136.  
  137.   Rezultat:
  138.     Liczba wystapien znaku c w napisie s
  139. */
  140. int chr_str_cnt(char c, char * s)
  141. {
  142.     int Ilosc= 0;
  143.     while (*s)
  144.     {
  145.         if(*s == c)
  146.         {
  147.          Ilosc++;
  148.         }
  149.         s++;
  150.     }
  151.     return Ilosc;
  152. }
  153. /*
  154.   char * chr_str_pos(char c, char * s)
  155.  
  156.   Wyznacza wskazanie na pierwsze wystapienie znaku c w s
  157.  
  158.   Parametry:
  159.     char c   -- znak poszukiwany w napisie
  160.     char * s -- tablica zawierajaca napis
  161.  
  162.   Rezultat:
  163.     Wskazanie na pierwsze wystapienie znaku c w s lub 0 gdy znak
  164.     nie zostal znaleziony
  165. */
  166. char * chr_str_pos(char c, char * s)
  167. {
  168.     while(*s)
  169.     {
  170.         if(*s == c)
  171.         {
  172.             return s;
  173.         }
  174.         s++;
  175.     }
  176.  
  177.     return 0;
  178. }
  179. /*
  180.   char * chr_str_rpos(char c, char * s)
  181.  
  182.   Wyznacza wskazanie na ostatnie wystapienie znaku c w s
  183.  
  184.   Parametry:
  185.     char c   -- znak poszukiwany w napisie
  186.     char * s -- tablica zawierajaca napis
  187.  
  188.   Rezultat:
  189.     Wskazanie na ostatnie wystapienie znaku c w s lub NULL gdy znak
  190.     nie zostal znaleziony
  191. */
  192. char * chr_str_rpos(char c, char * s)
  193. {
  194.     char*Index = 0;
  195.     int Znaleziony=0;
  196.     while (*s)
  197.     {
  198.         if(*s == c)
  199.         {
  200.             Znaleziony++;
  201.             Index = s; // Wziecie Addresu i przypisanie do Index. Ostatnie mozliwe znalezienie zapisane.
  202.         }
  203.         s++;
  204.     }
  205.     if (Znaleziony > 0) //Przepisanie Addresu finalnego.
  206.     {
  207.      return s = Index;
  208.     }
  209.     return 0;
  210. }
  211. /*
  212.   char * str_rev( char * s )
  213.  
  214.   Odwraca kolejnosc znakow w tablicy s
  215.  
  216.   Parametry:
  217.     char * s -- tablica zawierajaca napis
  218.  
  219.   Rezultat:
  220.     Wskazanie na tablice s
  221. */
  222. char * str_rev(char * s)
  223. {
  224.     int i = 0;
  225.     char * poczatek_ptr , * koniec_ptr,ch;
  226.     koniec_ptr = s;
  227.     poczatek_ptr = s;
  228.     //for (koniec_ptr += (str_len(s)-1),i = 0; i < (str_len(s)/2); i++,koniec_ptr--,poczatek_ptr++)
  229.     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.
  230.     {
  231.        ch = *koniec_ptr; //Przekazanie koniecowego znaku do tymczasowego char
  232.        *koniec_ptr = *poczatek_ptr; //Przekazanie poczatkowego znaku do koncowego
  233.        *poczatek_ptr = ch; // Przekazanie tymczaswoego char(koncowego zapisanego) do poczatkowego
  234.     } //Przekzaywanie jest na podstawie (1-6 2-5 3-4 Koniec) lub (1-3 , 2-2 Koniec)
  235.     return s;
  236. }
  237. /*
  238.   int str_word_count(char * s)
  239.  
  240.   Funkcja wyznacza liczbe slow w tablicy s. Jako slowo
  241.   rozumiemy ciag liter cyfr i znakow podkreslenia. Slowa
  242.   moga być rozdzielane jednym lub wieloma znakami spacji, tabulacji,
  243.   podzialu wiersza.
  244.  
  245.   Przyklad:
  246.   Napis: "Ala _ma_    kot_ta i    dwa psy"
  247.   Liczba slow: 6
  248.  
  249.   Parametry:
  250.     char * s -- tablica zawierajaca napis
  251.  
  252.   Rezultat:
  253.     Liczba slow w napisie s
  254. */
  255. int str_word_count(char * s)
  256. {
  257.     int Ilosc=0;
  258.     while(*s != '\0')
  259.     {
  260.         if ((*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || *s == '_') //Sprawdzamy czy slowo zaczyna sie na akceptowalny znak
  261.         {
  262.             Ilosc++;  //Jesli tak dodajemy +1 do ilosc slow
  263.             while ((*s >= '0' && *s <= '9') || (*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || *s == '_') // Przeskakujemy do nastepnego slowa
  264.             {
  265.                 ++s;
  266.                 if (*s == '\0') // Jesli akurat natrafimy na koniec. Konczymy prace funkcji.
  267.                 {
  268.                  return Ilosc;
  269.                 }
  270.             }
  271.         }
  272.         s++; //Przeskakiwanie znakow pustych lub nie akceptowalnych jako znak slowa.
  273.     }
  274.     return Ilosc;
  275. }
  276.  
  277. int main()
  278. {
  279.   char line[MAX_LEN];
  280.   char c;
  281.   char * pos;
  282.  
  283.   cout << "\n\nWpisz linie tekstu: ";
  284.   cin.getline(line, MAX_LEN-1);
  285.  
  286.   cout << "\nLiczba znakow         : " << str_len(line);
  287.   cout << "\nLiczba malych liter   : " << lwr_str_cnt(line);
  288.   cout << "\nLiczba duzych liter   : " << upr_str_cnt(line);
  289.   cout << "\nLiczba cyfr           : " << dgt_str_cnt(line);
  290.   cout << "\nLiczba znakw alphanum : " << nalpha_str_cnt(line);
  291.  
  292.   cout << "\n\nPodaj pojedynczy znak: ";
  293.   cin >> c;
  294.  
  295.   cout << "\nLiczba wystapien znaku " << c << ": " << chr_str_cnt(c, line);
  296.  
  297.   if((pos = chr_str_pos(c, line)) != 0)
  298.   {
  299.       cout << "\nPierwsze wystapienie znaku " << *pos << " na pozycji: " << pos - line;
  300.   }
  301.   else
  302.     cout << "\nZnak " << c << " nie zostal znaleziony";
  303.  
  304.   if((pos = chr_str_rpos(c, line)) != 0)
  305.     cout << "\nOstatnie wystapienie znaku " << *pos  << " na pozycji: " << pos - line;
  306.   else
  307.     cout << "\nZnak " << c << " nie zostal znaleziony";
  308.  
  309.   cout << "\n\nNapis oryginalny : " << line;
  310.   cout << "\nNapis odwrocony  : " << str_rev(line);
  311.   cout << "\nLiczba slow w napisie: " << str_word_count(line);
  312.   cin.ignore();
  313.   cin.get();
  314.   return EXIT_SUCCESS;
  315. }
  316.  
Add Comment
Please, Sign In to add comment