Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

2.4.9Контрольные вопросы

  1. Что такое массив? Зачем используются массивы?

  2. Что такое индекс элемента массива?

  3. Как присвоить содержимое одного массива другому?

  4. Опишите алгоритм поиска максимального (минимального) элемента в массиве.

  5. Опишите алгоритм поиска элемента в массиве.

  6. Заполните массива случайными числами.

  7. Вычислите сумму элементов массива.

  8. Выведите массив, начиная с конца.

  9. Определите количество нечетных элементов в массиве.

  10. Определите, есть ли в массиве хотя бы один элемент, который делится на 10.

Тема 2.5. Обработка строк

Обработка строк очень похожа на обработку массивов, поскольку строка – это массив символов. В языке C++ создан класс string, облегчающий работу со строками, в частности, две строки типа string могут быть присвоены друг другу посредством одного присваивания и сравнены за одну операцию. Над массивами такие действия невозможны: они требуют поэлементной обработки.

2.5.1Подготовка к работе

Для работы с классом string следует подключить соответствующий заголовочный файл и, если вы планируете работать с русскими символами, то следует обеспечить корректность их ввода и вывода. Шаблон ваших программ должен быть примерно следующим:

#include <windows.h>

#include <string>

#include <iostream>

using namespace std;

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

…

system("pause");

return 0;

}

После запуска программы нужно сменить шрифт в консоли (см. тема 1.5).

2.5.2Поиск символа в строке

Важной задачей является поиск символа в строке и разновидности этой задачи. Вот как может выглядеть эта задача. Проверить, есть ли заданный символ в строке; найти позицию, на которой расположен заданный символ; определить, сколько раз заданный символ встречается в строке; найти позицию последнего вхождения символа в строку и т.д.

Все перечисленные задачи предполагают следующее: нужно пробежаться по символам строки и проверить их на совпадение с заданным символом. Начнем с задачи подсчета количества вхождений символа в строку: объявим дополнительную переменную, инициализируем ее нулем и будем инкрементировать ее при каждом совпадении заданного символа с очередным. Естественно эта процедура реализуется в цикле.

#include <windows.h>

#include <string>

#include <iostream>

using namespace std;

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

string word;

cin >> word;

int k=0;

for (int i=0; i<word.length(); i++) {

if (word[i] == 'a') {

k++;

}

}

cout << k << endl;

system("pause");

return 0;

}

Обратите внимание на цикл

for (int i=0; i<word.length(); i++)

Он начинается с 0, а заканчивается word.length()-1. Здесь учитывается тот факт, что символы в строке нумеруются, начиная с 0. Длину строки можно запомнить в какую-то переменную и работать уже с ней. Это сократит запись, есть длина будет использоваться где-то далее и, кроме того, обеспечит повышение эффективности: не будет необходимости вычислять длину строки на каждой итерации. Эта программа определяет количество букв ‘a’ в строке word. Конечно, искомый символ можно задать в виде переменной. Для проверки, есть ли заданный символ в строке нужно проверить, равно количество 0 или нет.

#include <windows.h>

#include <string>

#include <iostream>

using namespace std;

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

string word; cin >> word;

char ch; cin >> ch;

int l=word.length();

int k=0;

for (int i=0; i<l; i++) {

if (word[i] == ch) {

k++;

}

}

if (k!=0) {

cout << "Есть";

} else {

cout << "Нет";

}

system("pause");

return 0;

}

Более правильно данную задачу решать с помощью логической переменной и прерывать цикл, если элемент найден.

bool est=false;

for (int i=0; i<l; i++) {

if (word[i] == ch) {

est=true;

break;

}

}

est ? cout << "Есть" : cout << "Нет";

Чтобы найти позицию вхождения символа, то нужно запомнить позицию, есть обнаружено совпадение, в некоторой переменной.

if (word[i] == ch) {

position=i;

}

После окончания цикла вывести значение этой переменной.