Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual_C_console.pdf
Скачиваний:
34
Добавлен:
16.05.2015
Размер:
954.14 Кб
Скачать

109

temp = *pt; *pt = ch; ch = temp; pt++;

}

/* Цикл while завершается при достижении конца строки, и указатель остается на этом символе. Поэтому символ конца строки '\0' надо "сдвинуть" вправо на одну позицию, а на освободившееся место записать последний значащий символ строки. Затем на конец строки приписать символ '\0'. Эти действия выполнены в следующих двух строках */

*pt++ = ch; // Сначала присвоить, затем нарастить указателя *pt = '\0'; // Указатель уже на новом месте

cout << "Строка после вставки \n" << st;

}

else cout << "\n Ошибка в данных"; _getch();

}

Пример 5. Проверка правильности расстановки скобок.

Вводится арифметическое выражение, содержащее круглые скобки. Правила расстановки скобок следующие:

Первая слева в выражении скобка открывающая.

Количество открывающих скобок равно количеству закрывающих скобок.

При просмотре выражения слева направо в любой момент количество открытых скобок не может быть меньше количества закрытых скобок (т.е. ситуация "( ))(" не допустима).

Для решения задачи будем использовать целочисленную переменную (назовем ее count), которую предварительно приравняем нулю. Эта переменная будет хранить баланс скобок: значение переменной увеличивается на 1, если во время просмотра выражения встретилась открывающая скобка, и уменьшается на 1, если попалась за-

110

крывающая скобка. Приведенные выше правила расстановки скобок сводятся к двум простым условиям: до окончания анализа выражения баланс скобок >= 0 и равен нулю при достижении конца строки. Далее откроем цикл, который с помощью рабочего указателя, предварительно настроенного на начало строки, обеспечивает последовательный доступ к символам строки, составляющей выражение.

Условие продолжения цикла (т.е. прохода по выражению) задано двумя указанными выше отношениями, связанными операцией И. Если при анализе выражения count станет отрицательным (не выполнено последнее правило), то цикл завершается, не доходя до конца выражения. Если же конец выражения достигнут, то count хранит баланс открывающих и закрывающих скобок. Поэтому независимо от условия, которое привело к завершению цикла, скобки расставлены правильно, если после окончания цикла count равно 0. Ниже приведен текст этой программы.

// Проверка парности скобок

#include "stdafx.h" #include <conio.h> #include <iostream> using namespace std; #define SIZE 40

void _tmain()

{

char st[SIZE], *pt; int count = 0;

cout << "Введите строку со скобками \n"; cin >> st;

pt = st;

while((*pt != '\0') && count >= 0) // Можно и так: while(*pt && count >= 0)

{

if(*pt == '(') count++; if(*pt == ')') count--; pt++;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]