Символьные строки в стиле C

Задания раздела 3.5.4
3.37. Что делает следующая программа?
const char ca[]={'h','e','l','l','o'};
const char *cp=ca;
while (*cp) {std::cout << *cp <<std::endl; ++cp;
}
3.38. В этом разделе упоминалось, что не только некорректно, но и бессмысленно пытаться сложить два указателя. Почему сложение двух указателей бессмысленно?
3.39. Напишите программу, сравнивающую две строки. Затем напишите программу сравнивающую значение двух символьных строк в стиле С.
3.40. Напишите программу, определяющую два символьных массива, инициализированных строковыми литералами. Теперь определите третий символьный массив для содержания результата конкатенации этих двух массивов. Используйте функции strcopy() и strcat() для копирования этих двух массивов в третий.
Читать далее «Символьные строки в стиле C»

Указатели и массивы

Задания раздела 3.5.3
3.34. С учетом, что указатели p1 и p2 указывают на элементы в том же массиве, что делает следующий код? Какие значения p1 или p2 делают этот код недопустимым?
p1+=p2-p1;
3.35. Напишите программу, которая использует указатели для обнуления элемента массива.
3.36. Напишите программу, сравнивающую два массива на равенство. Напишите подобную программу для сравнивания двух векторов.
Читать далее «Указатели и массивы»

Доступ к элементам массива

Задания раздела 3.5.2
3.30. Выявите ошибки индексации в следующем коде:
constexpr size_t array_size=10;
int ia[array_size];
for (size_t ix=1; ix<=array_size; ++ix)
ia[ix]=ix;
3.31. Напишите программу, где определен массив из десяти целых чисел, каждому элементу которого присвоено значение, соответствующее его позиции в массиве.
3.32. Скопируйте массив, определенный в предыдущем упражнении, в другой массив. Перезапишите эту программу так, чтобы использовались векторы.
3.33. Что будет, если не инициализировать массив scores в программе с кластеризацией оценок с помощью массивов.
Читать далее «Доступ к элементам массива»

Массивы

Задания раздела 3.5.1
3.27. Предположим, что функция txt_size() не получает никаких аргументов и возвращает значение типа int. Объясните, какие из следующих определений недопустимы и почему?
unsigned buf_size=1024;
(a) int ia[buf_size];
(b) int ia[4*7-14];
(c) int ia[txt_size()];
(d) char st[11]="fundamental";
3.28. Какие значения содержатся в следующих массивах?
string sa[10];
int ia[10];
int main() {
string sa2[10];
int ia2[10];
}
3.29. Перечислите некоторые из недостатков использования массива вместо вектора.
Читать далее «Массивы»

Использование итераторов

Задания раздела 3.4.2
3.24. Переделайте последнее упражнение раздела 3.3.3 с использованием итераторов.
3.25. Перепишите программу кластеризации оценок из раздела 3.3.3 с использованием итераторов вместо индексации.
3.26. Почему в программе двоичного поиска использован код
mid=beg+(end-beg)/2, а не
mid=(beg+end)/2;?
Читать далее «Использование итераторов»

Операции с векторами

Задания раздела 3.3.2, 3.3.3
3.14. Напишите программу, читающую последовательность целых чисел из потока cin и сохраняющую их в векторе
3.15. Повторите предыдущую программу, но на сей раз читайте строки
3.16. Напишите программу, выводящую размер и содержимое вектора из упражнения 3.13. Проверьте правильность своих ответов на это упражнение. При неправильных ответах повторно изучите раздел 3.3.1.
3.17. Прочитайте последовательность слов из потока cin и сохраните их в векторе. Прочитав все слова, обработайте вектор и переведите символы каждого слова в верхний регистр. Отобразите преобразованные элементы по восемь слов на строку.
3.18. Корректна ли следующая программа? Если нет, то как ее исправить?
vector<int> ivec;
ivec[0]=42;
3.19. Укажите три способа определения вектора и заполнения его десятью элементами со значением 42. Укажите, есть ли предпочтительный способ для этого и почему.
3.20. Прочитайте набор целых чисел в вектор. Отобразите сумму каждой пары соседних элементов. Измените программу так, чтобы она отображала сумму первого и последнего элементов, затем сумму второго и последнего и т.д.
Читать далее «Операции с векторами»

Тип vector

Задания раздела 3.3.1
3.12. Есть ли ошибки в следующих определениях векторов? Объясните, что делают допустимые определения. Объясните, почему некорректны недопустимые определения.
(a) vector<vector<int>> ivec;
(b) vector<string> svec=ivec;
(c) vector<string> svec(10,"null");
3.13. Сколько элементов находится в каждом из следующих векторов? Каковы значения этих элементов?
(a) vector<int> v1;
(b) vector<int> v2(10);
(c) vector <int> v3(10, 42);
(d) vector<int> v4{10};
(e) vector<int> v5{10, 42};
(f) vector<string> v4{10};
(g) vector<string> v7{10, "hi"};
Читать далее «Тип vector»

Работа с символами строки

Задания раздела 3.2.3
3.6. Используйте оператор for для замены всех символов строки на x.
3.7. Что будет, если определить управляющую переменную цикла в предыдущем упражнении как имеющую тип char? Предскажите результат, а затем измените программу так, чтобы использовался тип char, и убедитесь в своей правоте.
3.8. Перепишите программу первого упражнения, сначала используя оператор while, а затем традиционный цикл for. Какой из трех подходов вы предпочтете и почему?
3.9. Что делает следующая программа? Действительно ли она корректна? Если нет, то почему.
string s;
cout << s[0] << endl;
3.10. Напишите программу, которая читает строку символов, включающую знаки пунктуации, и выведите её, но уже без знаков пунктуации.
3.11. Допустим ли следующий серийный оператор for? Если да, то каков тип переменной с?
const string s="Keep out!";
for (auto &c : s) {/*    */}
Читать далее «Работа с символами строки»

Тип string

Задания раздела 3.2.2 
3.2. Напишите программу, читающую со стандартного устройства ввода по одной строке за раз. Измените программу так, чтобы читать по одному слову за раз.
3.3. Объясните, как символы пробелов обрабатываются в операторе ввода класса string и в функции getline().
3.4. Напишите программу, читающую две строки и сообщающую равны ли они. В противном случае программа сообщает, которая из них больше. Затем измените программу так, чтобы она сообщала, одинаковая ли у строк длина, а в противном случае которая из них длиннее.
3.5. Напишите программу, читающую строки со стандартного устройства ввода и суммирующую их в одну большую строку. Отобразите полученную строку. Затем измените программу так, чтобы отделять соседние введенные строки пробелами.
Читать далее «Тип string»