
- •«Омский государственный технический университет» программирование и основы алгоритмизации
- •Лабораторная работа 1
- •Алфавит языка, зарезервированые слова, операторы
- •Структура программы
- •Основные типы данных
- •Оператор присваивания, процедуры ввода-вывода
- •Printf(“строка форматов”, [список выводимых аргументов]
- •% [Флаг] [ширина] [.Точность]символ формата
- •Scanf(“%строка форматов”, &имя переменной);
- •Лабораторная работа 2 програмирование разветленых алгоритмов. Операторы передачи управления
- •Лабораторная работа 3 програмирование циклических алгоритмов с заданым числом повторений
- •Лабораторная работа 4 структурированные типы данных. Программирование алгоритмов обработки массивов
- •Лабораторная работа 5 обработка символьных и строковых данных
- •Лабораторная работа 6 указатели
- •Лабораторная работа 8 программирование с использованием функций
- •Лабораторная работа 9 структуры и объединения
- •Индивидуальные задания
Лабораторная работа 5 обработка символьных и строковых данных
Символьный тип – это тип данных, используемый для описания отдельных символов (знаков, букв, кодов). Традиционная запись символьного значения представляет собой символ, заключенный в апострофы, например ‘a’.
Строковая константа представляет собой последовательность символов, заключенную в кавычки (“), например, “это моя первая строка”. В конце каждого строкового типа данного компилятором добавляется нулевой символ, представляемый управляющей константой \0.
Строковая переменная описывается как char st[12], в квадратных скобках указывается длина строки. Это означает, что строковая переменная – массив символов, причем нумерация элементов массива начинается с нуля, и число элементов массива равно числу символов плюс единица.
Операция конкатенации строк обозначается обратной косой чертой:
“Это очень длин\
ная строка символов”
Для описания строковой переменной можно воспользоваться понятием массива символов или указателя (ссылки) на массив символов, например:
char mas[15]; char*st;
Для ввода/вывода символьных/строковых типов данных можно воспользоваться не только функциями printf() и scanf(), но и рядом других функций, прототипы которых описаны библиотечном файле stdio.h:
- функция int putchar(char c) выводит одиночный символ в стандартный выходной поток stdout без последующего перехода к новой строке.
- функция int getchar() применяется для ввода очередного символа из стандартного входного потока stdin. Эта функция не требует задания параметра и принимает значение целого типа, например:
char ch;
ch=getchar();
putchar(ch);
- функция int puts(char *st) используется для вывода строки символов в стандартный выходной поток. Строка символов дополняется символом конца строки ‘\n’, и после вывода строки символов функцией puts() переход к новой строке происходит автоматически.
Пример.
#include<stdio.h>
void main()
{char mas[15], *st;
….
puts(mas); puts(st);
}
- функция char *gets(char *st) выполняет считывание из стандартного входного потока. Ввод продолжается до тех пор, пока не будет нажата клавиша Enter. Эта функция дополняет строку введенных символов символом ‘\0’.
Пример.
#include<stdio.h>
void main()
{char mas[15], *st;
….
gets(mas); gets(st);
}
Если число представлено в виде строки символов, то можно воспользоваться функциями int atoi (строка символов), long atoll (строка символов), double atof (строка символов) для преобразования строки, соответственно в целое, длинное целое или вещественное число. Прототипы этих функций описаны в библиотечном файле stdlib.h. Если строка не может быть преобразована в число, то возвращается нуль.
В языке С++ существует группа операторов для работы с символьными переменными (табл. 8), которые описаны в загрузочном файле ctype.h.
Таблица 8
Операторы, для работы с символьными переменными
Синтаксис |
Описание |
isalpha(c) |
Функция проверяет, является ли символ с буквой |
isdigit(c) |
Функция проверяет, является ли символ с цифрой |
islower(c) |
Функция проверяет, является ли символ с строчной буквой |
isspace(c) |
Функция проверяет, является ли символ с пустым символом (пробел, табуляция или новая строка) |
isupper(c) |
Функция проверяет, является ли символ с прописной буквой |
isalnum(c) |
Функция проверяет, является ли символ с алфавитноцифром (буква или цифра) |
isascii(c) |
Функция проверяет, является ли символ с кодом ASCII(0-127) |
iscntrl(c) |
Функция проверяет, является ли символ с управляющим символом |
ispunct(c) |
Функция проверяет, является ли символ с знаком пунктуации |
toupper(c) |
Функция преобразует символ с в прописную букву |
tolower(c) |
Функция преобразует символ с в строчную букву |
Для работы со строкой символов в файле string.h описаны прототипы ряда функций. Библиотека представляет возможности копирования (strcpy, strncpy), сравнения (strcmp, strncmp), объединения строк (strcat, strncat), поиска подстроки (strstr), поиска вхождения символа (strchr, strrchr, strpbrk), определения длины строки (strlen) и т.д., а также содержит специальные функции ввода строк и отдельных символов с клавиатуры и из файла.
Пример.
#include <stdio.h>
#include <string.h>
void main()
{char s[80], passw[]}=”kuku”; // passw – эталонный пароль.
// Можно описать как *passw=”kuku”
int i, k=0;
for(i=0;!k && i<3; i++)
{printf(“Введите пароль: \n”);
gets(s); // функция ввода строки
if (strstr(s,passw)) k=1; // функция сравнения строк
}
if (k) printf(“\n Пароль принят”);
else printf(“\n Пароль не принят”);
return 0;
}
Следует помнить, что операция присваивания одной строки другой не определена (поскольку строка является массивом) и может выполняться с помощью цикла или функции из стандартной библиотеки. Процесс копирования строки scr в строку dest проиллюстрируем на следующем примере:
char scr[10], dest[10];
…
for(int i=0;i<=strlen(scr); i++) dest[i]=scr[i];