Программирование. Принципы и практика использования C++ Исправленное издание, стр. 250
// добавляем нуль после последнего символа return is;}Правильная установка ширины потока
istream>>width()stringvector0read_word()int main(){ const int max = 128; char s[max]; while (read_word(cin,s,max)) { cout << s << " is"; if (!is_palindrome(s,strlen(s))) cout << " not"; cout << " a palindrome\n"; }}Вызов
strlen(s)read_word()cout<<s
string18.6.3. Палиндромы, созданные с помощью указателей
Вместо использования индексов для идентификации символов можно было бы применить указатели.
bool is_palindrome(const char* first, const char* last) // указатель first ссылается на первую букву // указатель last ссылается на последнюю букву{ while (first < last) { // мы еще не достигли середины if (*first!=*last) return false; ++first; // вперед ––last; // назад } return true;}
Функция
is_palindrome()int main(){ const int max = 128; char s[max]; while (read_word(cin,s,max)) { cout << s << " is"; if (!is_palindrome(&s[0],&s[strlen(s)–1])) cout << " not"; cout << " a palindrome\n"; }}Просто забавы ради мы переписали функцию
is_palindrome()bool is_palindrome(const char* first, const char* last) // указатель first ссылается на первую букву // указатель last ссылается на последнюю букву{ if (first<last) { if (*first!=*last) return false; return is_palindrome(first+1,last-1); } return true;}Этот код становится очевидным, если перефразировать определение палиндрома: слово является палиндромом, если его первый и последний символы совпадают и если подстрока, возникающая после отбрасывания первого и последнего символов, также является палиндромом.
Задание
В этой главе мы ставим два задания: одно необходимо выполнить с помощью массивов, а второе — с помощью векторов. Выполните оба задания и сравните количество усилий, которые вы при этом затратили.
Задание с массивами
1. Определите глобальный массив
gaint2. Определите функцию
f()intint3. В функции
f()3.1. Определите локальный массив
laint3.2. Скопируйте значения из массива
gala3.3. Выведите на печать элементы массива
la3.4. Определите указатель
pint