mituri

[C++] Sprawdza czy slowo jest palindromem

Jan 8th, 2016
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. #include <iostream>
  4. #include <string>
  5. #include <cctype>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. void przestaw(char& v1, char& v2); //Zamienia miejscami wartości v1 i v2.
  11. string od_tylu(const string& s); //Zwraca kopię łańcucha s ze znakami w odwróconej kolejności.
  12.  
  13. string usun_interpunkcje(const string& s, const string& znaki_interpunkcyjne);
  14. // Zwraca kopię łańcucha s, w której usunięte są wszystkie
  15. // wystąpienia znaków interpunkcyjnych, jakie zostały podane w łańcuchu
  16. //znaki_interpunkcyjne.
  17.  
  18. string na_male_litery(const string& s);
  19. // Zwraca kopię łańcucha, w której wszystkie wielkie litery zostały
  20. // zmienione na małe,
  21. // a małe litery pozostawione bez zmian.
  22.  
  23. bool jest_palindromem(const string& s);
  24. //Zwraca wartość true, jeśli łańcuch s jest palindromem; wartość false w przeciwnym przypadku.
  25.  
  26. int _tmain(int argc, _TCHAR* argv[])
  27. {
  28.  
  29. string str;
  30. cout << "Wpisz tekst i nacisnij klawisz [Enter]\n";
  31. getline(cin, str);
  32. if (jest_palindromem(str))
  33. cout << "\"" << str + "\" jest palindromem.";
  34. else
  35. cout << "\"" << str << "\" nie jest palindromem.";
  36. cout << endl;
  37.  
  38. getchar();
  39. return 0;
  40. }
  41.  
  42. void przestaw(char& v1, char& v2) {
  43. char pom = v1; v1 = v2; v2 = pom;
  44. }
  45.  
  46. string od_tylu(const string& s) {
  47. int poczatek = 0;
  48. int koniec = s.length( );
  49. string pom(s);
  50. while (poczatek < koniec)
  51. {
  52. koniec--;
  53. przestaw(pom[poczatek], pom[koniec]);
  54. poczatek++;
  55. }
  56. return pom;
  57. }
  58.  
  59.  
  60. string usun_interpunkcje(const string& s, const string& znaki_interpunkcyjne) {
  61. string bez_inter; //początkowo jest pusty
  62. int dlugosc_s = s.length( );
  63. int dlugosc_inter = znaki_interpunkcyjne.length( );
  64. for (int i = 0; i < dlugosc_s; i++)
  65. {
  66. string znak = s.substr(i, 1); //jednoznakowy
  67. int ind_zn_inter = znaki_interpunkcyjne.find(znak, 0);
  68. //Liczba ind_zn_inter określa położenie każdego kolejnego znaku
  69. //pobranego z łańcucha s w łańcuchu znaki_interpunkcyjne.
  70. if (ind_zn_inter < 0 || ind_zn_inter >= dlugosc_inter)
  71. {
  72. bez_inter = bez_inter + znak;
  73. }
  74. }
  75. return bez_inter;
  76. }
  77.  
  78. //Korzysta z funkcji na_male_litery i usun_interpunkcje:
  79. bool jest_palindromem(const string& s) {
  80. string znaki_interpunkcyjne(",;:.?!'\" "); // znaki interpunkcyjne
  81. string str(s);
  82. str = na_male_litery(str);
  83. string str_malymi = usun_interpunkcje(str, znaki_interpunkcyjne);
  84. return (str_malymi == od_tylu(str_malymi));
  85. }
  86.  
  87.  
  88. string na_male_litery(const string& s) {
  89. string pom(s);
  90. for (int i = 0; i < s.length( ); i++)
  91. pom[i] = tolower(s[i]);
  92. return pom;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment