Примеры написания программ

Порядок написания программы

ОБРАБОТка строк

Цель работы

1. Научиться:

–объявлять строки в программе статически и динамически;

– вводить строки с пробелами внутри и без пробелов;

– писать стандартный цикл обработки строки;

–обращаться к символам строки по имени и через адрес;

– производить различные действия над символами.

2. Составить, выполнить и протестировать указанную задачу с помощью компьютера.

 

 

1. Выделить память под строку статически или динамически.

2. Ввести строку с клавиатуры.

3. Провести указанную обработку строки.

4. Вывести на экран исходную строку.

5. Вывести результат обработки.

6. Освободить динамическую память (если она выделялась).

 

 

Задача.Написать программу, которая возвращает номер последнего символа строки, совпавшего с указанным символом. Если символа в строке нет, возвратить 0.

Анализ решения задачи. Нельзя путать два понятия – индекс символа строки и номер символа строки. Понятия схожи, но номер начинается с 1, а индекс с 0, с помощью индекса организуется перебор символов в строке. Зная индекс i, легко определить номер – i+1.

 

Примечание. Вызов функции Rus перед строками-константами с русским текстом осуществляйте самостоятельно.

 

1 вариант решения – обращение к элементу массива идет через имя элемента массива, память выделяется статически, строка вводится без пробелов внутри.

 

Программа будет строиться в виде проекта.

Текст функции mainбудет выглядеть так:

//содержимое файла main.cpp

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include "Rus.h" //прототип функции русификации

int main(void)

{

char str[40], simvol; //объявили данные

int n=0,i; //номер искомого элемента массива

// ввод исходных данных

cout<<"\nВведите строку";

cin>>str;

cout<<"Введите символ";

cin>>simvol;

 

//организуем перебор символов строки для их обработки

for(i=0; str[i]!=0; i++)

if(str[i]== simvol) //если символ строки с инд i совпал с simvol

n= i+1; //номер символа

if(n!=0) //если символ в строке найден

cout<<"\nСимвол "<<n<<" по счету\n"; //вывод номера символа

else

cout<<"Символ в строке не найден";

return 0;

}

2 вариант решения – обращение к элементу массива идет через адрес элемента массива, память выделяется динамически, строка вводится с пробелами внутри.

//содержимое файла main.cpp

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

#include "Rus.h" //прототип функции русификации

int main(void)

{

char *str= new char[40], simvol; //объявили данные

int n=0,i; //номер символа и индекс

// ввод исходных данных

cout<<"\nВведите строку";

cin.getline(str, 40);

cout<<"Введите символ";

cin>>simvol;

//организуем перебор символов строки для их обработки

for(i=0; *(str+i)!=0; i++)

if(*(str+i)== simvol) //если символ строки с инд i совпал с simvol

n= i+1; //номер символа

if(n!=0) //если символ в строке найден

cout<<"\nСимвол "<<n<<" по счету\n"; //вывод номера символа

else

cout<<"Символ в строке не найден";

return 0;

}

 

Контрольные вопросы и задания

 

1. Дать определение строки.

2. Как объявить строку статически?

3. Как объявить строку динамически?

4. В чем особенность цикла обработки строки?

5. Какие операции можно произвести над символами?

6. Как обратиться к символу строки по имени?

7. Как обратиться к символу строки по адресу?

8. Объявите строку статически, динамически.

9.Обратитесь к символам строки по имени, по адресу при каждом выделении памяти.

10. Для наилучшего освоения темы выполните варианты 3, 9, 14.

 

 

Задание

 

Решить задачу, написав два варианта программы, выделяя память под строку сначала статически, а затем динамически.

 

Вариант 1. В заданной строке подсчитать количество латинских букв.

Вариант 2. В заданной строке подсчитать количество не цифр.

 

Вариант 3. В заданной строке подсчитать количество не латинских букв

 

Вариант 4. В заданной строке определить номер первого символа, равного заданному символу.

 

Вариант 5. Дана строка. Заменить все цифры в строке на пробелы и подсчитать количество маленьких латинских букв.

 

Вариант 6. Дана строка. Изменить заданную строку, заменив большие латинские буквы маленькими, а маленькие - на большие. Посторонние символы не менять.

 

Вариант 7. Дана строка. Заменить в исходной строке первые n символов на символ, введенный с клавиатуры. Программа должна работать корректно при любом n.

 

Вариант 8. Дана строка. Заменить в ней указанный символ другим. Символы ввести с клавиатуры.

 

Вариант 9. Дана строка. Инвертировать ее, то есть произвести обмен значениями между первым и последним символами строки, вторым и предпоследним и так далее. Дополнительных строк не создавать.

 

Вариант 10. Дана строка. Заменить n последних символов на один и тот же каждый. Символ ввести с клавиатуры. Программа должна работать корректно при любом n.

 

Вариант 11. Дана строка. Вычислить адрес символа строки, совпавшего с указанным символом. Если ни один символ из строки не совпал, то вывести сообщение.

 

Вариант 12. Дана строка. Проверить, является ли она палиндромом. Фраза называется палиндромом, если она читается от конца к началу так же, как от начала к концу при игнорировании всех знаков, кроме букв. Например, фраза "аргентина манит негра" – палиндром.

 

Вариант 13. Написать программу, которая анализирует строку, начиная с позиции pos, и вычисляет номер первого найденного пробела. Если пробела нет или значение pos неподходящее – результат равен 0.

 

Вариант 14. Даны две строки. Дозаписать n последних символов второй строки в конец первой. Считать, что размеры строк достаточны.

 

Вариант 15. Даны две строки. Определить, равны ли строки (совпадение должно быть буквальным).

Лабораторная работа 8