
- •1.1. Элементы языка программирования
- •Основные правила записи программы:
- •1.2. Алфавит языка
- •1.3. Лексемы
- •1.4. Концепция данных
- •Основные типы данных
- •Обьявление переменных
- •2.2. Операции
- •2.2.1. Арифметические операции
- •2.2.2. Операции присваивания
- •2.2.3. Операции отношения
- •2.2.4. Логические операции
- •2.2.5. Поразрядные операции
- •2.2.6. Вычисление выражений
- •3. Структурное программирование
- •3.1. Общая характеристика операторов
- •3.2. Оператор-выражение
- •3.3. Условный оператор
- •3.4. Составной оператор
- •3.5. Операторы для программирования циклов
- •3.5.1. Оператор цикла for
- •3.5.2. Оператор цикла while
- •3.5.3. Оператор цикла do while
- •3.5.4. Оператор break
- •3.5.5. Оператор continue
- •3.6. Оператор goto
- •3.7. Пустой оператор
- •3.8. Оператор switch
- •3.9. Оператор return
- •4. Массивы
- •4.1. Объявление массива
- •4.2. Обращение к элементам массива
- •4.3. Типовые алгоритмы работы с массивами
- •4.4. Многомерные массивы
- •5. Строки
- •5.1. Объявление строки
- •5.2. Посимвольная обработка строк
- •5.3. Ввод строк
- •5.4. Библиотечные функции для работы с текстом
- •6. Указатели
- •6.1. Объявление указателей
- •6.2. Операции над указателями
- •6.3. Связь между указателями и массивами
- •6.4. Функция strtok для выделения лексем из текста
- •6.5. Динамические массивы
- •7. Структуры и объединения
- •7.1. Объявление структуры
- •Компонент структуры может быть любого типа, кроме типа объявляемой структуры.
- •7.2. Операции над структурами
- •7.3. Объявление объединения
- •8. Модульное программирование
- •8.1. Нисходящее проектирование и программирование
- •8.2. Определение и вызов функции
- •8.3. Место определения функции в программе
- •8.4. Обмен данными между функциями
- •8.4.1. Использование глобальных переменных
- •8.4.2. Использование аппарата формальных и фактических параметров
- •8.4.3. Передача массивов в функцию
- •8.5. Перегрузка функции
- •8.6. Шаблон функции
- •8.7. Рекурсивные функции
- •8.8. Функции с параметрами по умолчанию
- •8.9. Передача в функцию другой функции
- •9. Работа с файлами
- •9.1. Текстовые и двоичные файлы
- •9.2. Объявление файловых переменных
- •9.3. Чтение текстового файла
- •9.4. Создание текстового файла
- •9.5. Изменение данных в текстовом файле
- •9.6. Вывод в двоичный файл
- •9.7. Чтение данных из двоичного файла
- •9.8. Изменение данных двоичного файла
- •9.9. Организация файла с произвольным доступом
- •10. Данные с динамической структурой
- •10.1. Линейный список
- •10.1.1. Специальные типы линейных списков
- •10.1.2. Реализация линейного списка с помощью массива
5.4. Библиотечные функции для работы с текстом
В стандартных библиотеках языка С++ содержится много полезных функций для работы со строками. Их использование позволяет сократить код программы, увеличить ее надежность, уменьшить время разработки программы. Библиотечные функции приведены в [1, 2]. Все функции рассчитаны на то, что строки заканчиваются нулевым символом. Ниже рассматриваются наиболее востребованные при обработке текста функции.
Функция strlen(s) возвращает текущую длину строки s. Для использования этой функции надо подключить к программе файл string.h.
Пример программы, определяющей является ли введенное слово палиндромом:
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char s[21]; //слово
int l, r; //левый и правый символы слова
cin>>s;
cout<<s<<endl;
l=0; //начало слова
r=strlen(s)-1; //конец слова
while(l<r && s[l]==s[r])
{
l++; //индекс левого символа
r--; //индекс правого символа
}
if( l>=r)
cout<<"Yes";
else
cout<<"No" ;
getch();
}
Тесты:
Шалаш палиндром
Тот палиндром
Таня не является палиндромом
АННА палиндром
С палиндром
Функция strcpy(s1,s2) копирует второй аргумент-строку s2 в строку s1. Размер первой строки должен быть не меньше второй, чтобы в нее скопировался 0-символ. Для использования этой функции надо подключить к программе файл string.h.
Пример использования функции:
char s1[21], s2[21];
cout<<s1<<endl; //abc
strcpy(s2,”12345”);
cout<<s2; //12345
Функция strcat(s1,s2) присоединяет к концу первой строки s1 вторую строку s2 и записывает результат в первую строку. Размер первой строки должен быть достаточен, чтобы в нее поместились две сцепленные строки и нулевой символ. Для использования этой функции надо подключить к программе файл string.h.
Пример использования функции:
char s1[10], s2[10];
cin>>s1; //abc
cin>>s2; //def
strcat(s1,s2);
cout<<s1<<endl; //abcdef
Функция strcmp(s1,s2) сравнивает две строки и возвращает число 0, если строки равны, отрицательное число, если строка s1 меньше s2 и положительное число, если строка s1 больше s2. Строки сравниваются лексиграфически (сравниваются коды соответствующих символов строк). Сравнение происходит до первого несовпадающего символа или до конца строк (если все символы строк совпадают). При лексиграфическом сравнении строка “Иванов” меньше строки “Петров”.
Пример программы сортировки по возрастанию массива из n слов (n<=20), максимальная длина слова 15 символов:
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main()
{
char s[20][16]; //массив из 20 строк
char x[16]; //переменная для перестановки слов
int i, j, n; //номер слова и номер прохода
int n; //количество слов
cout<<"n? “;
cin>>n;
cout<<"s? "<<endl;
for (i=0; i<n; i++) //ввод входной строки из нескольких слов ...
cin>>s[i]; // ввод слова
for (j=1; j<n; j++) //сортировка пузырьковым методом
for (i=0; i<n-j; i++)
if(strcmp(s[i],s[i+1])>0) //сравнение слов
{//перестановка слов
strcpy(x,s[i]);
strcpy(s[i],s[i+1]);
strcpy(s[i+1],x);
}
for (i=0; i<n; i++)
cout<<s[i]<<' ';
getch();
}
Тест:
n=4, Иванов Андреев Сидоров Петров
Результат: Андреев Иванов Петров Сидоров