Odwracanie napisu i palindrom
Wskaźniki i napisy w tablicach char - Podstawy C++ (C++)
reverse zamienia pierwszy znak z ostatnim, drugi z przedostatnim i tak do środka (n / 2 zamian). Palindrom czyta się tak samo od końca: isPalindrome porównuje te same pary znaków. Napis w cudzysłowie można podać prosto jako const char *.
#include <iostream>
#include <cstring>
using namespace std;
// dlugosc napisu: liczymy znaki do '\0'
int length(const char *s) {
int n = 0;
while (s[n] != '\0') {
n++;
}
return n;
}
// slowo zaczyna sie tam, gdzie po spacji (albo na poczatku) stoi inny znak
int countWords(const char *s) {
int words = 0;
bool inWord = false;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] == ' ') {
inWord = false;
} else if (!inWord) {
words++;
inWord = true;
}
}
return words;
}
// litery maja kolejne kody: 'a' = 97 ... 'z' = 122, 'A' = 65 ... 'Z' = 90
void toUpper(char *s) {
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] = s[i] - 'a' + 'A';
}
}
}
// odwracanie w miejscu: zamiana pierwszego z ostatnim, drugiego z przedostatnim...
void reverse(char *s) {
int n = length(s);
for (int i = 0; i < n / 2; i++) {
char temp = s[i];
s[i] = s[n - 1 - i];
s[n - 1 - i] = temp;
}
}
bool isPalindrome(const char *s) {
int n = length(s);
for (int i = 0; i < n / 2; i++) {
if (s[i] != s[n - 1 - i]) {
return false;
}
}
return true;
}
int main() {
char word[] = "Ala";
// napis to tablica znakow zakonczona znakiem '\0' (kod 0)
for (int i = 0; i < 4; i++) {
cout << i << ": kod " << (int)word[i];
if (word[i] != '\0') {
cout << ", znak " << word[i];
}
cout << endl;
}
cout << word << endl;
char text[] = "Ala ma kota";
cout << "dlugosc: " << length(text) << ", strlen: " << strlen(text) << endl;
cout << "slowa: " << countWords(text) << endl;
toUpper(text);
cout << text << endl;
reverse(text);
cout << text << endl;
cout << "kajak: " << isPalindrome("kajak") << ", kotek: " << isPalindrome("kotek") << endl;
return 0;
}Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu Podstawy C++·Zaloguj się, aby zapisać postęp na koncie.