#include #include using namespace std; /* Exercises: * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week8/%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8%20%D0%B8%20%D0%BD%D0%B8%D0%B7%D0%BE%D0%B2%D0%B5.pdf */ // Задача първа: // Да се напише функция, която проверява дали низ е симетричен. bool isSymetrical(char const str[]) { int len = strlen(str); for (int i = 0; i <= len / 2; i++) { if (str[i] != str[len - 1 - i]) return false; } return true; } void ex1() { char str1[] = "racecar"; char str2[] = "normalcar"; cout << isSymetrical(str1) << " " << isSymetrical(str2) << endl; } // Задача втора: // Да се напише програма, която въвежда символен низ с максимална дължина 20 // символа и извежда низ, в който всяка малка буква е заменена с голяма, а другите // символи са непроменени. // Пример: // Вход: Hello // Изход: HELLO void capitalizeLetters(char str[]) { int len = strlen(str); for (int i = 0; i < len; i++) { if (str[i] >= 'a' && str[i] <= 'z') str[i] -= 'a' - 'A'; } } void ex2() { const int MAX_STR_LEN = 20; char str[MAX_STR_LEN]; cin.getline(str, MAX_STR_LEN); capitalizeLetters(str); cout << str << endl; } // Задача трета: // Да се напише функция, която приема изречение под формата на символен низ и // извежда всички думи в него. void printWords(char str[]) { int len = strlen(str); for (int i = 0; i < len; i++) { if (str[i] == ' ') cout << endl; else cout << str[i]; } } void ex3() { const int MAX_STR_LEN = 100; char str[MAX_STR_LEN]; cin.getline(str, MAX_STR_LEN); printWords(str); } // Задача четвърта: // Да се напише функция, която приема изречение под формата на символен низ и // изтрива ненужните интервали между думите. void removeSpaces(char str[]) { int len = strlen(str), moveBack = 0; for (int i = 0; i < len; i++) { str[i - moveBack] = str[i]; if (str[i] == ' ') moveBack++; } str[len - moveBack] = '\0'; } void ex4() { const int MAX_STR_LEN = 100; char str[MAX_STR_LEN]; cin.getline(str, MAX_STR_LEN); removeSpaces(str); cout << str << endl; } // Задача пета: // Шифърът на Цезар е една от най-простите техники за криптиране. Има параметер // offset (цяло число), което е броят на буквите, с които всяка буква в английската // абзука е отместена. Например, в шифър с отместване 2, буквата a би станала c. // Буквата z би станала b. Шифър с отместване 0 значи, че всички букви остават // непроменени. Всички символи, които не са букви остават непроменени. // Създайте функции, които извършват криптиране и декриптиране на даден низ // използвайки шифъра на Цезар. const int AMOUNT_OF_LETTERS = 'z' - 'a' + 1; char rotateLetter(char let, int offset) { char start; if (offset >= 0) start = (let <= 'Z') ? 'A' : 'a'; else start = (let <= 'Z') ? 'Z' : 'z'; char letterInd = let - start; return start + ((letterInd + offset) % AMOUNT_OF_LETTERS); } void caesarEncrypt(char msg[], int offset) { int len = strlen(msg); for (int i = 0; i < len; i++) { msg[i] = rotateLetter(msg[i], offset); } } void caesarDecrypt(char msg[], int offset) { caesarEncrypt(msg, -offset); } void ex5() { const int MAX_STR_LEN = 100; int offset = 0; cin >> offset; char msg[MAX_STR_LEN]; cin.ignore(); cin.getline(msg, MAX_STR_LEN); caesarEncrypt(msg, offset); cout << "Encrypted: " << msg << endl; caesarDecrypt(msg, offset); cout << "Decrypted: " << msg << endl; } // Задача шеста: // Да се създаде функция, която проверява дали даден текстов низ е коректен имейл. // Изискванията за коректност са поне една малка буква, поне една голяма буква, // поне един символ от следните: $, &, *, !, %. Също така трябва да завършва на // @.com. void ex6() { } int main() { ex5(); }