close

Вход

Забыли?

вход по аккаунту

?

Задача 2

код для вставкиСкачать

Задача №2.
Условие задачи
Исключить из строки символов те, которые располагаются между круглыми скобками, включая их. Подсчитать насколько укоротилась строка.
Описание метода решения задачи
1. Выявляем исходные данные, результаты, назначаем им имена.
Исходные данные: исходная строка *str1- объявляется как указатель; переменная-указатель-*tmp, в неё будем записывать начальный адрес новой строки
k- длина исходной строки
с- длина полученной строки
len - определяет разность исходной и полученной строк
Результаты: преобразованная строка str2
2. Выбираем метод решения задачи, разбиваем на этапы (с учетом возможностей ЭВМ)
Первоначально составим укрупненную схему, а затем подробную для блока III.
Укрупненная схема
I. Подключение всех необходимых заголовочных файлов
II. Глобальные описания переменных char *str1,*str2=new char,*tmp; int k=0,len=0,c=0;
III. Получение необходимого результата и вывод его на экран
III. 1. МРЗ:
* вводим строку (gets(str1); функция считывает строку из stdin и записывает адрес str1, добавляя символ '\0')
* в переменной tmp сохраняем начальный адрес новой строки tmp= str2;
* в переменную k записываем длину исходной строки - k=strlen(str1);
* поиск открывающейся скобки:
в первом цикле "перебора элементов строки" - while(*str1 != '\0'):
- ищем символ '(', если такой не найден - if (*str1!='('), то переписываем во вторую строку символы из первой - *str2=*str1;
иначе прерываем цикл (break;) так как нашли открывающуюся скобку
- увеличиваем адрес переменной str2 на одну ячейку (str2++) для передвижения по новой строке
- увеличиваем адрес переменной str1 на одну ячейку (str1++), иначе из цикла не выйдем
* поиск закрывающейся скобки:
во втором цикле "перебора элементов строки" - while(*str1 != '\0'):
- ищем символ ')', если такой не найден - if (*str1!=')'), то со строкой не производим никаких действий
иначе прерываем цикл (break;) так как нашли закрывающуюся скобку
- не забываем увеличивать адрес переменной str1 на одну ячейку (str1++), иначе из цикла не выйдем
* увеличиваем адрес переменной str1 на одну ячейку (str1++), чтобы исключить из рассмотрения позицию закрывающейся скобки
* запись во вторую строку оставшихся символов
в третьем цикле "перебора элементов строки" - while(*str1 != '\0'):
- переписываем во вторую строку символы из первой - *str2=*str1;
- увеличиваем адрес переменной str2 на одну ячейку (str2++) для передвижения по новой строке
- увеличиваем адрес переменной str1 на одну ячейку (str1++), иначе из цикла не выйдем
* после окончания цикла "перебора элементов строки str1" в новую строку записываем символ конца строки (*str2='\0';)
* в переменную с записываем длину новой строки - c=strlen(str2);
* вычисляем насколько укоротилась новая строка - len=k-c;
* вывод результата: - предварительно нужно перейти на начало строки - str2=tmp;
- выводим на экран новую строку str2 и сообщение "строка укоротилась на len символов";
Блок - схема задачи №2
Программа, реализующая данный алгоритм
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
void main()
{
char *str1,*str2=new char,*tmp;
int k=0,len=0,c=0;
clrscr();
printf("Введи строку, содержащую круглые скобки ....\n");
gets(str1);
k=strlen(str1);
tmp=str2;
while(*str1 != '\0')
{
if(*str1!='(') *str2=*str1;
else break;
str2++;
str1++;
}
while(*str1 != '\0')
{
if(*str1!=')');
else break;
str1++;
}
str1++;
while(*str1 != '\0')
{
*str2=*str1;
str2++;
str1++;
}
*str2='\0';
str2=tmp;
c=strlen(str2);
len=k-c;
printf("\n%s",str2);
printf("\nСтрока укоротилась на ",len); printf(" символов");
getch();
}
Документ
Категория
Рефераты
Просмотров
27
Размер файла
22 Кб
Теги
задачи
1/--страниц
Пожаловаться на содержимое документа