
С++ ЕНФ / мои отчёты / Отчёт по Лабе №6
.docМинистерство науки и образования Российской Федерации
Уфимский государственный авиационный технический университет
Кафедра ВВТиС
ОТЧЕТ
по лабораторной работе №6
Строки в С++
Выполнил: студент гр. ПМ-125
Марьин Д.Ф.
Проверил: ст. преподаватель каф. ВВТиС
Насибуллаева Э.Ш.
Уфа 2005
Цель работы
-
Изучить методы представления строк в С++
-
Разобраться в наборе стандартных функций работы со строками из библиотеки string.h
-
Научиться осуществлять сортировку строк по заданному параметру
Задание к лабораторной работе № 6
1. Написать программу, считывающую несколько строк текста и печатающую таблицу, показывающую сколько раз в тексте встречается каждая буква алфавита.
2. Написать программу, упорядочивающую массив строк в порядке убывания их длины
методом сортировки Шелла. Использовать указатели на строки.
Во всех программах должна быть предусмотрена защита ввода данных.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
1.1.Строки
Строковая константа - это последовательность символов, заключенная в двойные кавычки:
Каждая строковая константа содержит на один символ больше, чем кажется; все они заканчиваются пустым символом '\0' со значением 0.
Строка имеет тип "вектор из соответствующего числа символов". Для каждой строки s strlen(s)==sizeof(s)-1, поскольку strlen() не учитывает завершающий 0. Соглашение о представлении неграфических символов с обратной косой можно использовать также и внутри строки. Это дает возможность представлять в строке двойные кавычки и escape-символ \. Самым обычным символом этого рода является, безусловно, символ новой строки '\n'.
Однако в строке может стоять обратная косая, сразу после которой идет новая строка; и то, и другое будет проигнорировано.
Новая строка, перед которой идет escape (обратная косая), не приводит к появлению в строке новой строки, это просто договоренность о записи. В строке можно иметь пустой символ, но большинство программ не будет предполагать, что есть символы после него. Например, строка "asdf\000hjkl" будет рассматриваться стандартными функциями, вроде strcpy() и strlen(), как "asdf". Вставляя численную константу в строку с помощью восьмеричной или шестнадцатиричной записи, благоразумно всегда использовать число из трех цифр. Читать запись достаточно трудно и без необходимости беспокоиться о том, является ли символ после константы цифрой или нет.
1.2.Стандартные функции работы со строками
Стандартные функции обработки строк. В языке С для обработки символьных строк существует специальный набор стандартных функций, описанных в заголовочных файлах string.h и stdlib.h. К ним относятся такие функции как:
1. Функция определения длины строки.
strlen |
unsigned strlen(const char *str); вычисляет длину строки str. |
strcspn |
int strcspn(const char *str1, const char *str2); определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2. |
strspn |
int strspn(const char *str1, const char *str2); определяет длину первого сегмента строки str1, содержащего только символы из множества символов строки str2. |
2. Функции получения чисел по их символьному представлению
atof |
double atof(const char *str); преобразует строку str в вещественное число типа double. |
atoi |
int atoi(const char *str); преобразует строку str в целое число типа int. |
atol |
long atol(const char *str); преобразует строку str в целое число типа long. |
3. Функции получения символьного представления чисел
itoa |
char *itoa(int value, char *str, int radix); преобразует целое value в строку str. При изображении числа используется система счисления с основанием radix. Если основание 10 и число отрицательное - первым символов строки будет "минус". |
ltoa |
char *ltoa(long value, char *str, int radix); преобразует длинное целое value в строку str. При изображении числа используется система счисления с основанием radix. |
ultoa |
char *ultoa(unsigned long value, char *str, int radix); преобразует беззнаковое длинное целое value в строку str. При изображении числа используется система счисления с основанием radix. |
4. Функции копирования строк
strcpy |
char * strcpy (char *sDest, const char *sSource); копирует байты строки sSource в строку sDest. |
strncpy |
char * strncpy (char *sDest, const char *sSource, int count); копирует первые count байт строки sSource в строку sDest. Если count меньше или равно длине sSource заключительный символ '\0' автоматически не добавляется в sDest . В противном случае заключительный символ вставляется после count байт, среди которых строка sSource дополненная пробелами. |
strdup |
char * strdup (const char *str); выделяет память и переносит в нее копию строки str. |
5. Функции конкатенации строк
strcat |
char * strcat (char *sDest, const char *sSource); приписывает строку sSource к строке sDest. |
6. Функции сравнения строк
strcmp |
char * strcmp (const char *str1, const char *str2); сравнивает строки str1 и str2. Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1 > str2. |
strncmp |
char * strncmp (const char *str1, const char *str2, int count); сравнивает первые count байт строк str1 и str2. Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1> str2. |
strnicmp |
char * strnicmp (const char *str1, const char *str2, int count); сравнивает первые count байт строк str1 и str2, не учитывая регистра(прописные и строчные буквы считаются одинаковыми). Результат отрицателен, если str1 < str2; равен 0, если str1 == str2, и положителен, если str1> str2. |
7. Функции поиска строк
strchr |
char * strchr (const char *str, int c); ищет в строке str первое вхождение символа c. Возвращает NULL, если символ в строке отсутствует. |
strrchr |
char * strrchr (const char *str, int c); ищет в строке str последнее вхождение символа c. Возвращает NULL, если символ в строке отсутствует. |
strstr |
char * strstr (const char *str1, const char *str2); ищет в строке str1 подстроку str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2, или NULL, если подстрока str2 в строке str1 отсутствует. |
strpbrk |
char * strpbrk (const char *str1, const char *str2); ищет в строке str1 первое вхождение любого символа из строки str2. Возвращает NULL, если такой символ в строке отсутствует. |
strtok |
char * strtok (char *str1, const char *str2); ищет в строке str1 лексемы, выделенные символами из второй строки str2. |
8. Функции преобразования строк
strlwr |
char * strlwr (const char *str); преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра. |
strupr |
char * strupr (const char *str); преобразует буквы нижнего регистра в строке в соответствующие буквы верхнего регистра. |
9. Функции заполнения строк
strset |
char * strset (const char *str, int c); Заполняет строку str заданным символом c. |
strnset |
char * strnset (const char *str, int c, int count); Заполняет первые count байт строки str заданным символом c. |
2.ПРАКТИЧЕСКАЯ ЧАСТЬ
2.1.Описание программы 6LB1.cpp
В данной программе создаётся заданный массив символов, с которым потом сравнивается введенный пользователем массив; считается количество совпадений соответствующих символов и выводится таблица, состоящая из букв алфавита и соответствующих количеств совпадений.
2.2.Описание программы 6B2.cpp
В данной программе требуется произвести сортировку строк по их длине в порядке убывания.
Для непосредственной сортировки используется метод Шелла. Суть этого метода заключается в том, что массив делится на группы с шахматным чередованием элементов. В пределах каждой группы на каждом шаге выполняется сортировка методом простых вставок, но на последнем этапе сортируется весь массив.
ЗАКЛЮЧЕНИЕ
-
В языке С++ имеется два вида строк: строки завершающиеся нулевым байтом-NBTL строки и класс string
-
При работе со строками необходимо всегда учитывать, что они завершаются нулевым элементом
-
Все функции работы со строками ,объявленные в стандартном заголовочном файле string.h,являются единственно возможными операциями со строками, т.к. операторов для работы с ними в языке С++ нет
-
Сортировку строк по длине удобнее всего проводить при использовании указателей на эти строки
Список литературы
-
Подбельский В.В. Язык Си++. – М.: Финансы и статистика,1996.–560 с.
-
Дейтел Х., Дейтел П. Язык пограммирования С++: перевод с англ.
М.:ЗАО «Издательство БИНОМ»,1998,1024с.