Слайды и текст доклада
Pic.1
Лекция 5 Строки Формат строки в языке С Принципы работы со строками Функции для работы со строками
Pic.2
Строка Строка – это последовательность ASCII или UNICODE символов. Строки в большинстве языков программирования высокого уровня рассматриваются как отдельный тип, входящий в систему базовых типов …
Pic.3
Форматы хранения строк Исторически сложилось два представления формата строк: формат ANSI; строки с завершающим нулем (используется в языке С). Формат ANSI устанавливает, что значением первой позиции …
Pic.4
Форматы хранения строк В строках с завершающим нулем, значащие символы строки указываются с первой позиции, а признаком завершения строки является значение ноль. Представление рассмотренной ранее …
Pic.5
Объявление строк Строки в языке С реализуются посредством массивов символов. Поэтому объявление ASCII строки на языке С имеет следующий синтаксис: char имя[длина]; Объявление строки имеет тот же …
Pic.6
Объявление строк Инициализация строки осуществляется при ее объявлении, используя следующий синтаксис: char str[длина] = строковый литерал; Строковый литерал – строка ASCII символов заключенных в …
Pic.7
Объявление строк Объявление константных строковых переменных начинается с ключевого слова const, за которым следует объявление строки с инициализацией. Пример: const char message[] = “Сообщение об …
Pic.8
Работа со строками Так как строки на языке С являются массивами символов, то к любому символу строки можно обратиться по его индексу. Для этого используется синтаксис обращения к элементу массива, …
Pic.9
Массивы строк Объявление массивов строк в языке С также возможно. Для этого используются двумерные массивы символов, что имеет следующий синтаксис: char имя[количество][длина]; Первым размером …
Pic.10
Массивы строк При объявлении массивов строк можно производить инициализацию: char имя[количество][длина] = {строковый литерал №1, . . . строковый литерал №N}; Число строковых литералов должно быть …
Pic.11
Массивы строк Например: char month[12][10] = { ”Январь”, ”Февраль”, ”Март”, ”Апрель”, ”Май”, ”Июнь”, ”Июль”, ”Август”, ”Сентябрь”,”Октябрь”, ”Ноябрь”, ”Декабрь” };
Pic.12
Массивы строк При объявлении массивов строк с инициализацией допускается не указывать количество строк в квадратных скобках. В таком случае, количество строк в массиве будет определено автоматически …
Pic.13
Функции для работы со строками Все библиотечные функции, предназначенные для работы со строками, можно разделить на три группы: ввод и вывод строк; преобразование строк; обработка строк.
Pic.14
Ввод и вывод строк Для ввода и вывода строковой информации можно использовать функции форматированного ввода и вывода (printf и scanf). Для этого в строке формата при вводе или выводе строковой …
Pic.15
Ввод и вывод строк Недостатком функции scanf при вводе строковых данных является то, что символами разделителями данной функции являются: перевод строки, табуляция; пробел. Поэтому, используя данную …
Pic.16
Ввод и вывод строк Для ввода и вывода строк в библиотеке stdio. h содержатся специализированные функции gets и puts. Функция gets предназначена для ввода строк и имеет следующий заголовок: char * …
Pic.17
Ввод и вывод строк Простейшая программа: ввод и вывод строки с использованием функций gets и puts будет иметь вид: char str[100] = “”; printf(“Введите строку: ”); gets(str); printf(“Вы ввели: ”); …
Pic.18
Ввод и вывод строк Помимо функций ввода и вывода в потоки в библиотеке stdio. h присутствуют функции форматированного ввода и вывода в строки. Функция форматированного ввода из строки имеет следующий …
Pic.19
Ввод и вывод строк Функции форматированного вывода в строку имеют следующие заголовки: int sprintf(char * restrict buffer, const char * restrict format, [argument] . . . ); int snprintf(char * …
Pic.20
Ввод и вывод строк В следующем фрагменте программы осуществляется ввод целых чисел и вычисление их суммы (ввод значений продолжается пока не будет введена пустая строка): int summa = 0; while(1){ …
Pic.21
Преобразование строк Для преобразования строк, содержащих числа, в численные значения в библиотеке stdlib. h предусмотрен следующий набор функций: double atof(const char *string); int atoi(const char …
Pic.22
Преобразование строк Корректное представление вещественного числа в текстовой строке должно удовлетворять формату: [ ][{+|-}][цифры][. цифры][{e|E}[{+|-}]цифры] После символов E, e указывается …
Pic.23
Преобразование строк Помимо приведенных выше функций в библиотеке stdlib. h доступны также следующие функции преобразования строк в вещественные числа: float strtof(const char * restrict string, char …
Pic.24
Преобразование строк Аналогичные функции присутствуют и для преобразования строк в целочисленные значения: long int strtol(const char * restrict string, char ** restrict endptr, int base); unsigned …
Pic.25
Преобразование строк Функции обратного преобразования (численные значения в строки) в библиотеке stdlib. h присутствуют, но они не регламентированы стандартом, и рассматриваться не будут. Для …
Pic.26
Обработка строк В библиотеке string. h содержатся функции для различных действий над строками. Функция вычисления длины строки: size_t strlen(const char *string); Пример: char str[] = “1234”; int n = …
Pic.27
Обработка строк Функции копирования строк: char * strcpy(char * restrict dst, const char * restrict src); char * strncpy(char * restrict dst, const char * restrict src, size_t num); Пример: char …
Pic.28
Обработка строк Функции сравнения строк: int strcmp(const char *string1, const char *string2); int strncmp(const char *string1, const char *string2, size_t num); Функции осуществляют сравнение строк …
Pic.29
Обработка строк Функции объединения (конкатенации) строк: char * strcat(char * restrict dst, const char * restrict src); char * strncat(char * restrict dst, const char * restrict src, size_t num); …
Pic.30
Обработка строк Функции поиска символа в строке: char * strchr(const char *string, int c); char * strrchr(const char *string, int c); Пример: char str[] = “Строка для поиска”; char *str1 = …
Pic.31
Обработка строк Функция поиска строки в строке: char * strstr(const char *str, const char *substr); Пример: char str[] = “Строка для поиска”; char *str1 = strstr(str,“для”); //str1 == “для поиска”
Pic.32
Обработка строк Функция поиска первого символа в строке из заданного набора символов: size_t strcspn(const char *str, const char *charset); Пример: char str[] = “Компьютер”; char ch = …
Pic.33
Обработка строк Функции поиска первого символа в строке не принадлежащему заданному набору символов: size_t strspn(const char *str, const char *charset); Пример: char str[] = “Компьютер”; char ch = …
Pic.34
Обработка строк Функции поиска первого символа в строке из заданного набора символов: char * strpbrk(const char *str, const char *charset); Пример: char str[] = “Компьютер”; char *ptr = …
Pic.35
Обработка строк Функция поиска следующего литерала в строке: char * strtok(char * restrict string, const char * restrict charset); Например, необходимо подсчитать количество слов в строке. Слова …
Pic.36
Пример 1 Дана строка (максимум 15 символов), содержащая целое незнаковое число в троичной системе исчисления. Перевести число в семеричную систему исчисления. Полученный результат вывести на экран.
Pic.37
Пример 1 #include <stdio. h> int main(int argc, char *argv[]) { char str[16]; printf("Введите число: "); gets(str); unsigned num = 0, i; for(i=0;str[i]!=0;i++){ num += str[i] - 48; …
Pic.38
Пример 1 for(i=0;num>0;i++){ str[i] = num%7 + 48; num /= 7; } str[i] = 0; for(int j=0;j<i/2;j++){ char ch = str[j]; str[j] = str[i-j-1]; str[i-j-1] = ch; } printf(“Результат: ”); puts(str); …
Pic.39
Пример 2 Дана строка (максимально 100 символов), содержащая слова, разделенные одним или несколькими пробелами, или знаками табуляции. Заменить все знаки табуляции знаком пробела, удалить двойные …
Pic.40
Пример 2 #include <stdio. h> int main(int argc, char *argv[]) { char str[101]; printf("Введите строку: "); gets(str); for(int i=0;str[i]!=0;i++) if(str[i] == '\t') str[i] = …
Pic.41
Пример 3 Дана строка (максимально 100 символов), содержащая слова, разделенные одним или несколькими пробелами, или знаками табуляции. Заменить все знаки табуляции знаком пробела, удалить двойные …
Pic.42
Пример 3 #include <stdio. h> #include <string. h> int main(int argc, char *argv[]) { char str[101]; printf("Введите строку: "); gets(str); do{ int ind = …
Pic.43
Пример 4 Дана строка (максимальная длина 100 символов), содержащая слова, разделенные пробелами или знаками табуляции. Число слов в строке не превышает 20, а длина каждого слова не более 10 символов. …
Pic.44
Пример 4 #include <stdio. h> #include <string. h> int main(int argc, char *argv[]) { char str[101]; printf("Введите строку: "); gets(str); char array[20][11]; int count = 0; …
Pic.45
Пример 4 int flag = 1; while(flag){ flag = 0; for(int i = 0;i<count-1;i++) if(strcmp(array[i],array[i+1])>0){ char buffer[11]; strcpy(buffer,array[i]); strcpy(array[i],array[i+1]); …
Pic.46
Пример 5 Дан массив строк (максимально 25 строк, каждая строка не более 80 символов). Строки вводятся пользователем, признак завершения ввода – ввод пустой строки. Упорядочить строки по длине или по …
Pic.47
Пример 5 #include <stdio. h> #include <string. h> int main(int argc, char *argv[]) { char strs[25][81]; unsigned count = 0; printf("Вводите строки:\n"); for(int …
Pic.48
Пример 5 int flag = 1; while(flag){ flag = 0; for(int i = 0;i<count-1;i++) if((type&&(strlen(strs[i]) > strlen(strs[i+1])))|| (!type&&(strcmp(strs[i],strs[i+1])>0))){ char …
Скачать презентацию
Если вам понравился сайт и размещенные на нем материалы, пожалуйста, не забывайте поделиться этой страничкой в социальных сетях и с друзьями! Спасибо!