Представление строк в СИ.pptx
- Количество слайдов: 27
Представление строк в языке Си
Строки в языке Си реализуются посредством массивом символов. Последним элементом массива всегда является нуль-символ, код которого равен 0 (’ ’ – символ конца строки).
Примеры создания строк и их заполнения: 1 вариант Использование строкового литерала (текста, заключённого в кавычки): char String[] = “Это пример”; String 0 1 2 3 4 5 6 7 8 9 10 Э т о п р и м е р
2 вариант Использование символьных констант Размер массива - 11 символов. char String[] = {‘Э’, ‘т’, ‘о’, ‘п’, ‘р’, ‘и’, ‘м’, ‘е’, ‘р’, ‘ ’};
3 вариант Создается массив для хранения 13 символов (нуль-символ не считаем), а используем только 11. char String[13] = “Это пример”;
4 вариант Объявляется указатель на строковой литерал: char* String = “Это пример”; String 0 1 2 3 4 5 6 7 8 9 10 Э т о п р и м е р
5 вариант Строка вводится с клавиатуры через функцию scanf: char String[13] = “”; printf(“ Введите строку: “); scanf(“%s”, &String); // или scanf(“%s”, String); printf(“%s”, String); Введётся лишь текст до 1 -го пробела. String 0 1 2 3 4 5 6 7 8 9 10 11 12 Э т о х х х х х
6 вариант Строка вводится с клавиатуры через функцию gets (
Справка. Функция puts (
7 вариант Строка объявляется через указатель и вводится с клавиатуры через gets. char *S; puts(“Введите строку: ”); gets(S); puts(S); Строка вводится вместе с пробелами.
Примечание Компилятор от Microsoft помещает строковые литералы в область, доступную только для чтения, поэтому выполнение следующего примера завершается с ошибкой «access violation» : char* str = "Money"; str[0] = 'H';
Чтобы иметь возможность модифицировать содержимое строки, соответствующую переменную необходимо объявлять как массив: char str[] = "Money"; str[0] = 'H'; В этом случае содержимое строкового литерала будет скопировано в стек и изменение этой копии не вызовет никаких нареканий со стороны операционной системы.
Задача 1 Определите, совпадают ли первая и последняя буквы строки. #include “stdafx. h” #include
Задача 2 Сосчитать количество гласных букв в предложении. #include “stdafx. h” #include
Задача Проверьте, все ли буквы в слове различны. #include “stdafx. h” #include
k=strlen(a); //k-кол-во букв в слове for(i=0; i
Задача 3 Вставьте между одинаковыми буквами в слове пробел. #include “stdafx. h” #include
for(i=0; i
Функции для работы со строками (Заголовочный файл
Функции преобразования Некоторые функции преобразования данных “строка ↔ число” (Заголовочный файл
Пример программы с strcpy и strcat: char String[41], FIO[31]; puts(“Введите Вашу фамилию и инициалы = ”); gets(FIO); strcpy(String, “Вас зовут ”); strcat(String, FIO); puts(String);
Примеры: 1) char str[80]; strcpy(str, "Go Down"); // теперь в str содержится "Go Down « 2) char str[80]; strcpy(str, "Heat"); strcat(str, "seeker"); // теперь в str содержится "Heatseeker « 3) char str[80]; strcpy(str, strchr("Overdose", 'd')); // теперь str содержит "dose"
4) char* strrchr( const char* s, char chr ); Ищет последнее вхождение символа chr в строку s и возвращает указатель на часть строки, начинающуюся с искомого символа. Если символ chr отсутствует в строке src, функция возвращает NULL. Пример использования: char str[80]; strcpy(str, strrchr("Bad Boy Boogie", 'B')); // теперь str содержит "Boogie"
5) char str[80]; strcpy(str, strstr("Fly On The Wall", "The")); // теперь str содержит "The Wall « 6) int n = strcmp("Sink The Pink", "Stand Up"); // n < 0, так как 'i' < 't', так как 105 < 116 7) int _stricmp( const char* s 1, const char* s 2 ); _stricmp сравнивает строки s 1 и s 2 аналогично функции strcmp, но без учета регистра символов. int n = _stricmp("Danger", "dan. Ger"); // n == 0
8) char* strtok( char* S, const char* Razd ); strtok - Последовательно разбивает строку S на лексемы , считая разделителями все символы строки Raz. При каждом вызове возвращается указатель на очередную найденную лексему или NULL, если достигнут конец строки S. Данная функция модифицирует исходную строку.
char cur_lex[80]; char str[] = "Send Fort. Thern. Man"; char seps[] = "trn"; strcpy(cur_lex, strtok(str, seps)); // теперь в cur_lex содержится "Send For" strcpy(cur_lex, strtok(NULL, seps)); // теперь в cur_lex содержится "The" strcpy(cur_lex, strtok(NULL, seps)); // теперь в cur_lex содержится "Man“ Указатель на исходную строку передается только при первом вызове функции; при последующих вызовах для работы с этой же строкой необходимо передавать значение NULL.