
- •Лекция 1. Понятие алгоритма. Свойства алгоритма
- •Лекция 2. Способы описания алгоритмов
- •Лекция 3. Типовые алгоритмы программ
- •Лекция 4. Принципы разработки схем алгоритмов программ
- •Лекция 5. Эволюция языков программирования Классификация языков программирования. Понятие системы программирования.
- •Лекция 6.
- •Структура программы. Назначение функции main. Объявление функции main. Назначение заголовочных файлов
- •Лекция 7. Переменные и данные. Основные типы данных. Объявление переменных. Инструкции присваивания
- •Лекция 8. Функции ввода-вывода Форматированный вывод на экран
- •Лекция 9. Стандартные математические функции
- •Лекция 10. Алгоритм и программы линейной структуры
- •Лекция 11.
- •Лекция 12. Ветвления
- •If (выражение) оператор;
- •Лекция 13. Оператор выбора (переключатель).
- •Циклы Лекция 14.
- •Лекция 15.
- •Массивы Лекция 16.
- •Лекция 17. Сортировка массивов.
- •Лекция 18. Многомерные массив.
- •Лекция 19. Указатели и ссылки.
- •Лекция 20. Указатели и массивы.
- •Лекция 21. Символы и символьные строки
- •Лекция 22. Графика
- •Лекция 23. Использование функций графических примитивов, работы с текстом в графическом режиме.
- •Функции Лекция 24.
- •Лекция 25. Прототип функции.
- •Лекция 26. Передача значений через глобальные переменные.
- •Лекция 29. Объединение.
- •Лекция 30 Файлы
- •Лекция 31. Работа с файлами на диске.
Лекция 21. Символы и символьные строки
В языках Си/Си++ нет специально определенного строкового типа данных. Символьные строки организуются как массивы символов, последним из которых является символ \0, внутренний код которого равен нулю. Отсюда следует одно важное преимущество,— на длину символьного массива в Си нет ограничения.
Строка описывается как символьный массив. Например:
char STR[20];
Одновременно с описанием строка может инициализироваться. Возможны два способа инициализации строки — с помощью "строковой константы и в виде списка символов:
char S[10]="строка";
char S[]="строка";
char S[10]={‘с’,’т’,’р’,’о’,’к’,’а’,’\0’};
По результату первого описания под строку s будет выделено 10 байт памяти, из них первые 7 получат значения при инициализации (седьмой — нулевой символ). Второе описание сформирует строку из семи символов. Третье описание по результату равнозначно первому. Конечно, можно определить символьный массив и так:
char S[10]={ 'c', 'т', 'p', 'o', 'к,', 'a'};
т. е. без нулевого символа в конце. Но это приведет к проблемам с обработкой такой строки, так как будет отсутствовать ориентир на его окончание.
Отдельные символы строки идентифицируются индексированными именами. Например, в описанной выше строке S [ 0 ] = ' с',
S[5]='a'.
Обработка строк обычно связана с перебором всех символов от начала до конца. Признаком конца такого перебора является обнаружение нулевого символа. В следующей программе производятся последовательная замена всех символов строки на звездочки и подсчет длины строки.
Для вывода строки на экран в стандартной библиотеке stdio имеется функция puts (). Аргументом этой функции указывается имя строки. В этой же библиотеке есть функция ввода строки с клавиатуры с именем gets (). В качестве аргумента указывается имя строки, в которую производится ввод.
Среди стандартных библиотек Си/Си++ существует библиотека функций для обработки строк. Ее заголовочный файл — string. h. В следующем примере используется функция определения длины строки из этой библиотеки. Имя функции — strlen (). В качестве аргумента указывается имя строки.
Пример. Ввести символьную строку. Перевернуть (обратить) эту строку. Например, если ввели строку «abcdef», то в результате в ней должны получить «f edcba».
//Обращение строки
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{ char C,S[10];
int i;
clrscr();
printf("Введите строку");
gets(S);
for(i=0; i<=(strlen(S)-1)/2; i++)
{ C=S[i]; S[i]=S[strlen(S)-i-l]; S[strlen(S)-i-l]=C;}
printf("\nПеревернутая строка:");
puts(S); }
Идея алгоритма состоит в перестановке символов, расположенных на одинаковом расстоянии от начала и конца строки. Перебор элементов строки доходит до ее середины. Составляя подобные программы, не надо забывать, что индекс первого символа строки — 0, а индекс последнего на единицу меньше длины строки.
Функции работы со строками
strcat
Синтаксис:
strcat(Строка1,Строка2)
Объединяет строки Строка1 и Строка2 и записывает результат в строку Строка1.
strcpy
Синтаксис:
strсру(Строка1,Строка2)
Копирует строку Строка1 в строку Строка2.
strlen
Синтаксис:
strlen(Строка)
Возвращает длину строки. Нулевой символ не учитывается.
strcmp
Синтаксис:
strcmp (Строка1,Строка2)
Сравнивает строки Строка 1 и Строка2. Возвращает 0, если строки равны, число меньше нуля, если Строка 1 < Строка 2 и число больше нуля, если Строка 1 > Строка 2.
strlwr
Синтаксис:
strlwr(Строка)
Преобразует строчные символы строки в прописные (обрабатывает только буквы латинского алфавита).
strupr
Синтаксис:
strupr(Строка)
Преобразует прописные символы строки в строчные (обрабатывает только буквы латинского алфавита).
strset
Синтаксис:
strset(Строка,Символ)
Заполняет строку указанным при вызове функции символом. Заголовочный файл для всех функций <string.h>