Скачать презентацию Представление строк в языке Си Строки в Скачать презентацию Представление строк в языке Си Строки в

Представление строк в СИ.pptx

  • Количество слайдов: 27

Представление строк в языке Си Представление строк в языке Си

Строки в языке Си реализуются посредством массивом символов. Последним элементом массива всегда является нуль-символ, Строки в языке Си реализуются посредством массивом символов. Последним элементом массива всегда является нуль-символ, код которого равен 0 (’ ’ – символ конца строки).

Примеры создания строк и их заполнения: 1 вариант Использование строкового литерала (текста, заключённого в Примеры создания строк и их заполнения: 1 вариант Использование строкового литерала (текста, заключённого в кавычки): char String[] = “Это пример”; String 0 1 2 3 4 5 6 7 8 9 10 Э т о п р и м е р

2 вариант Использование символьных констант Размер массива - 11 символов. char String[] = {‘Э’, 2 вариант Использование символьных констант Размер массива - 11 символов. char String[] = {‘Э’, ‘т’, ‘о’, ‘п’, ‘р’, ‘и’, ‘м’, ‘е’, ‘р’, ‘’};

3 вариант Создается массив для хранения 13 символов (нуль-символ не считаем), а используем только 3 вариант Создается массив для хранения 13 символов (нуль-символ не считаем), а используем только 11. char String[13] = “Это пример”;

4 вариант Объявляется указатель на строковой литерал: char* String = “Это пример”; String 0 4 вариант Объявляется указатель на строковой литерал: char* String = “Это пример”; String 0 1 2 3 4 5 6 7 8 9 10 Э т о п р и м е р

5 вариант Строка вводится с клавиатуры через функцию scanf: char String[13] = “”; printf(“ 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 ( <stdio. h>) Справка: Функция 6 вариант Строка вводится с клавиатуры через функцию gets ( ) Справка: Функция gets записывает в S введенную с клавиатуры строку и возвращает S. Признаком конца ввода является символ перевода строки (Enter): char* gets( char* S ); char String[13] = “”; puts(“Введите строку: ”); // или printf(“ Введите строку: “); gets(String); puts(String); // или printf(“%s”, String); Строка вводится вместе с пробелами.

Справка. Функция puts (<stdio. h>) выводит на экран строку S, переводит курсор в начало Справка. Функция puts () выводит на экран строку S, переводит курсор в начало следующей строки экрана и возвращает количество выведенных символов: int puts( const char* S ); Функции puts и gets используются только для текстового ввода / вывода. Функция strlen () возвращает длину строки S: unsigned strlen(const char *str);

7 вариант Строка объявляется через указатель и вводится с клавиатуры через gets. char *S; 7 вариант Строка объявляется через указатель и вводится с клавиатуры через gets. char *S; puts(“Введите строку: ”); gets(S); puts(S); Строка вводится вместе с пробелами.

Примечание Компилятор от Microsoft помещает строковые литералы в область, доступную только для чтения, поэтому Примечание Компилятор от Microsoft помещает строковые литералы в область, доступную только для чтения, поэтому выполнение следующего примера завершается с ошибкой «access violation» : char* str = "Money"; str[0] = 'H';

Чтобы иметь возможность модифицировать содержимое строки, соответствующую переменную необходимо объявлять как массив: char str[] Чтобы иметь возможность модифицировать содержимое строки, соответствующую переменную необходимо объявлять как массив: char str[] = "Money"; str[0] = 'H'; В этом случае содержимое строкового литерала будет скопировано в стек и изменение этой копии не вызовет никаких нареканий со стороны операционной системы.

Задача 1 Определите, совпадают ли первая и последняя буквы строки. #include “stdafx. h” #include Задача 1 Определите, совпадают ли первая и последняя буквы строки. #include “stdafx. h” #include #include void main() { char *S; int k; set. Console. CP(1251); set. Console. Output. CP(1251); puts(“Введите строку: “); gets(S); k=strlen(S); if (S[0]==S[k-1]) puts(“Одинаковые”); else puts(“Неодинаковые”); }

Задача 2 Сосчитать количество гласных букв в предложении. #include “stdafx. h” #include <windows. h> Задача 2 Сосчитать количество гласных букв в предложении. #include “stdafx. h” #include void main() { char *S; int i, j, kol=0; Char G[18]={‘А’, ’а’, ’Е’, ’е’, ’Ё’, ’ё’, ’И’, ’и’, ’О’, ’о’, ’У’, ’у’, ’Э’, ’э’, ’Ю’, ’ю’, ’Я’, ’я’}; set. Console. CP(1251); set. Console. Output. CP(1251); puts(“Введите строку: “); gets(S); for(i=0; S[i]<>’’; i++) for(j=0; j<18; j++) if (S[i]==G[j]) kol++; printf(“Кол-во гласных в предложении = %d”, kol); }

Задача Проверьте, все ли буквы в слове различны. #include “stdafx. h” #include <string. h> Задача Проверьте, все ли буквы в слове различны. #include “stdafx. h” #include void main() { char a[30]; int i, j, k, prizn; bool pr; printf("Введите слово : "); scanf("%s", &a); pr=true; // pr=true - все буквы разные // pr =false - есть одинаковые буквы

k=strlen(a); //k-кол-во букв в слове for(i=0; i<k-1; i++) for(j=i+1; j<k; j++) if (a[i]==a[j]) pr=false; k=strlen(a); //k-кол-во букв в слове for(i=0; i

Задача 3 Вставьте между одинаковыми буквами в слове пробел. #include “stdafx. h” #include <string. Задача 3 Вставьте между одинаковыми буквами в слове пробел. #include “stdafx. h” #include void main() { char a[30]; int i, j, k; printf(“Slovo : "); scanf("%s", &a); k =strlen(a); // Длина строки

for(i=0; i<k-1; i++) if (a[i]==a[i+1]) { // передвинем часть строки вправо for(j=k; j>i; j--) for(i=0; ii; j--) a[j+1]=a[j]; a[i+1]=' '; k++; } printf("%sn", a); }

Функции для работы со строками (Заголовочный файл <string. h>) 1. Длина строки int strlen(char*< Функции для работы со строками (Заголовочный файл ) 1. Длина строки int strlen(char*< строка>) 2. Конкатенация (сединение) двух строк. char* strcat(char*< строка-приемник>, char*< строка-источник>) 3. Копирование char* strcpy(char*< строка-приемник>, char*< строка-источник>) 4. Сравнение int strcmp(char*< строка 1>, char*< строка 2>) Возвращает: 0, если <строка 1> совпадает со <строкой 2>, число <0, если <строка 1> < <строки 2>, число >0, если <строка 1> > <строки 2>. 5. Поиск символа в строке. Возвращает указатель на 1 -й найденный символ. char* strchr(char*< строка>, int <символ>) 6. Поиск подстроки в строке. Возвращает указатель на найденную строку. char* strstr(char*< строка>, char*< подстрока>)

Функции преобразования Некоторые функции преобразования данных “строка ↔ число” (Заголовочный файл <stdlib. h>) Преобразование Функции преобразования Некоторые функции преобразования данных “строка ↔ число” (Заголовочный файл ) Преобразование строки в double, int, long : double atof (char*< строка>) int atoi (char*< строка>) long atol (char*< строка>) Преобразование int, long, unsigned long в строку: char* itoa (int <число>, char*< строка>, int <основание сист. сч. >) char* ltoa (long <число>, char*< строка>, int <основание сист. сч. >) char* ultoa (unsigned long <число>, char*< строка>, int <основание сист. сч. >)

Пример программы с strcpy и strcat: char String[41], FIO[31]; puts(“Введите Вашу фамилию и инициалы Пример программы с strcpy и strcat: char String[41], FIO[31]; puts(“Введите Вашу фамилию и инициалы = ”); gets(FIO); strcpy(String, “Вас зовут ”); strcat(String, FIO); puts(String);

Примеры: 1) char str[80]; strcpy(str, Примеры: 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 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( 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 - Последовательно разбивает строку 8) char* strtok( char* S, const char* Razd ); strtok - Последовательно разбивает строку S на лексемы , считая разделителями все символы строки Raz. При каждом вызове возвращается указатель на очередную найденную лексему или NULL, если достигнут конец строки S. Данная функция модифицирует исходную строку.

char cur_lex[80]; char str[] = 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.

char str[] =