Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВероника Тиронова
1 Символы и строки 1
2 Содержание 8.1Введение 8.2Основы Строк и Символов 8.3Библиотека работы со строками 8.4Преобразование строк 8.5Стандартная библиотека ввода- вывода 8.6Манипуляции со строками 8.7Сравнение строк 8.8Поиск строк 8.9Работа с памятью 8.10 Другие функции 2
3 8.1Введение Рассмотрим некоторые стандартные библиотечные функции Легко работать с символами, строками и блоками памяти Они позволяют Обработка слов Форматирование страницы Форматирование абзацев 3
4 8.2Основы Символов и Строк Символы Строительные блоки наших программ Каждая программа – это последовательность сгруппированных символов Константа символ Значение типа int представляет собой символ в одинарных кавычках 'z' представляет целое значение z (код) Строки Серии символов в рамках одного блокаt Включает буквы, цифры и спецсимволы ( *, /, $ ) Строковой литерал (строка константа) – в двойных кавычках "Hello" Строка это массив символов Строка указывает на первый символ Значение строки это адрес первого символа 4
5 8.2Основы Символов и Строк Объявление строк Как массив символов или переменная типа char * char color[] = "blue"; char *colorPtr = "blue"; Помните что конец строки определяется по символу '\0' color содержит 5 элементов Ввод строк Используете scanf scanf("%s", word); Копирует введенные данные в word[] Не нужно & (строка это уже указатель) Не забудьте предусмотреть место для '\0' 5
6 8.3Библиотека для обработки символов Работа с символами Включает функции для выполнения полезных тестов и манипуляций с символами Каждая функция получает символ (как int ) или EOF как аргумент Следующий слайд содержит таблицу всех функций в 6
7 8.3Библиотека для обработки символов 7
8 1. Загрузка хедеров 2. Запуск тестов 3. Печать 8 1/* Fig. 8.2: fig08_02.c 2 Using functions isdigit, isalpha, isalnum, and isxdigit */ 3#include 4#include 5 6int main() 7{7{ 8 printf( "%s\n%s%s\n%s%s\n\n", "According to isdigit: ", 9 isdigit( '8' ) ? "8 is a " : "8 is not a ", "digit", 10 isdigit( '#' ) ? "# is a " : 11 "# is not a ", "digit" ); 12 printf( "%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n", 13 "According to isalpha:", 14 isalpha( 'A' ) ? "A is a " : "A is not a ", "letter", 15 isalpha( 'b' ) ? "b is a " : "b is not a ", "letter", 16 isalpha( '&' ) ? "& is a " : "& is not a ", "letter", 17 isalpha( '4' ) ? "4 is a " : 18 "4 is not a ", "letter" ); 19 printf( "%s\n%s%s\n%s%s\n%s%s\n\n", 20 "According to isalnum:", 21 isalnum( 'A' ) ? "A is a " : "A is not a ", 22 "digit or a letter", 23 isalnum( '8' ) ? "8 is a " : "8 is not a ", 24 "digit or a letter", 25 isalnum( '#' ) ? "# is a " : "# is not a ", 26 "digit or a letter" ); 27 printf( "%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n", 28 "According to isxdigit:", 29 isxdigit( 'F' ) ? "F is a " : "F is not a ", 30 "hexadecimal digit", 31 isxdigit( 'J' ) ? "J is a " : "J is not a ", 32 "hexadecimal digit",
9 3. Печать Результат 9 33 isxdigit( '7' ) ? "7 is a " : "7 is not a ", 34 "hexadecimal digit", 35 isxdigit( '$' ) ? "$ is a " : "$ is not a ", 36 "hexadecimal digit", 37 isxdigit( 'f' ) ? "f is a " : "f is not a ", 38 "hexadecimal digit" ); 39 return 0; 40} According to isdigit: 8 is a digit # is not a digit According to isalpha: A is a letter b is a letter & is not a letter 4 is not a letter According to isalnum: A is a digit or a letter 8 is a digit or a letter # is not a digit or a letter According to isxdigit: F is a hexadecimal digit J is not a hexadecimal digit 7 is a hexadecimal digit $ is not a hexadecimal digit f is a hexadecimal digit
10 8.4 Преобразование строк В (базовые вещи) Конвертирует строку цифр в целое число или с плавающей точкой 10
11 1. Инициализация переменных 2. Преобразование строк 2.1 Присваивание переменной 3. Печать Результат 11 1/* Fig. 8.6: fig08_06.c 2 Using atof */ 3#include 4#include 5 6int main() 7{7{ 8 double d; 9 10 d = atof( "99.0" ); 11 printf( "%s%.3f\n%s%.3f\n", 12 "The string \"99.0\" converted to double is ", d, 13 "The converted value divided by 2 is ", 14 d / 2.0 ); 15 return 0; 16} The string "99.0" converted to double is The converted value divided by 2 is
12 8.5Стандартная библиотека ввода/вывода В файле 12
13 1. Инициализация переменных 2. Ввод 3. Печать 3.1 Определение функции (Примечание: рекурсия) 13 1/* Fig. 8.13: fig08_13.c 2 Using gets and putchar */ 3#include 4 5int main() 6{6{ 7 char sentence[ 80 ]; 8 void reverse( const char * const ); 9 10 printf( "Enter a line of text:\n" ); 11 gets( sentence ); printf( "\nThe line printed backwards is:\n" ); 14 reverse( sentence ); return 0; 17} 18 19void reverse( const char * const sPtr ) 20{ 21 if ( sPtr[ 0 ] == '\0' ) 22 return; 23 else { 24 reverse( &sPtr[ 1 ] ); 25 putchar( sPtr[ 0 ] ); 26 } 27} Enter a line of text: Characters and Strings The line printed backwards is: sgnirtS dna sretcarahC reverse вызывает сама себя используя подстроку оригинальной строки. Когда она достигнет '\0' она печатает строку используя putchar
14 8.6Манипуляция со строками с помощью Библиотеки Библиотека содержит функции для Манипулирования строковых данных Поиска строк «Токенизации» строк Определения длины строк 14
15 8.6Манипуляция со строками с помощью Библиотеки 15
16 Инициализация переменных Вызов функции Печать Результат 16 1/* Fig. 8.19: fig08_19.c 2 Using strcat and strncat */ 3#include 4#include 5 6int main() 7{7{ 8 char s1[ 20 ] = "Happy "; 9 char s2[] = "New Year "; 10 char s3[ 40 ] = ""; printf( "s1 = %s\ns2 = %s\n", s1, s2 ); 13 printf( "strcat( s1, s2 ) = %s\n", strcat( s1, s2 ) ); 14 printf( "strncat( s3, s1, 6 ) = %s\n", strncat( s3, s1, 6 ) ); 15 printf( "strcat( s3, s1 ) = %s\n", strcat( s3, s1 ) ); 16 return 0; 17} s1 = Happy s2 = New Year strcat( s1, s2 ) = Happy New Year strncat( s3, s1, 6 ) = Happy strcat( s3, s1 ) = Happy Happy New Year
17 8.7Функции сравнения строк Сравниваем числовые коды ASCII символов в строке int strcmp( const char *s1, const char *s2 ); Сравнивает строки s1 и s2 Возвращает отрицательное если s1 s2 int strncmp( const char *s1, const char *s2, size_t n ); Сравнивает до n символов строки s1 и s2 Возвращает те же значения 17
18 8.8Функции поиска 18
19 Инициализация переменных Вызов функции Печать Результат 19 1/* Fig. 8.27: fig08_27.c 2 Using strspn */ 3#include 4#include 5 6int main() 7{7{ 8 const char *string1 = "The value is "; 9 const char *string2 = "aehi lsTuv"; printf( "%s%s\n%s%s\n\n%s\n%s%u\n", 12 "string1 = ", string1, "string2 = ", string2, 13 "The length of the initial segment of string1", 14 "containing only characters from string2 = ", 15 strspn( string1, string2 ) ); 16 return 0; 17} string1 = The value is string2 = aehi lsTuv The length of the initial segment of string1 containing only characters from string2 = 13
20 Инициализация переменных Вызов функции Печать Результат 20 1/* Fig. 8.29: fig08_29.c 2 Using strtok */ 3#include 4#include 5 6int main() 7{7{ 8 char string[] = "This is a sentence with 7 tokens"; 9 char *tokenPtr; printf( "%s\n%s\n\n%s\n", 12 "The string to be tokenized is:", string, 13 "The tokens are:" ); tokenPtr = strtok( string, " " ); while ( tokenPtr != NULL ) { 18 printf( "%s\n", tokenPtr ); 19 tokenPtr = strtok( NULL, " " ); 20 } return 0; 23} The string to be tokenized is: This is a sentence with 7 tokens The tokens are: This is a sentence with 7 tokens
21 8.9 Работа с памятью Функции библиотеки Манипулирование, сравнение и поиск блоков памяти Можно манипулировать любыми блоками данных Параметры указатели типа void * Любой указатель может быть присвоен void *, и наоборот void * нельзя разыменовывать Каждая функция получает размер аргумента, указывающий количество байт (символов) для обработки 21
22 8.9 Работа с памятью 22
23 Инициализация переменных Вызов функции Печать Результат 23 1/* Fig. 8.32: fig08_32.c 2 Using memmove */ 3#include 4#include 5 6int main() 7{7{ 8 char x[] = "Home Sweet Home"; 9 10 printf( "%s%s\n", 11 "The string in array x before memmove is: ", x ); 12 printf( "%s%s\n", 13 "The string in array x after memmove is: ", 14 memmove( x, &x[ 5 ], 10 ) ); return 0; 17} The string in array x before memmove is: Home Sweet Home The string in array x after memmove is: Sweet Home Home
24 8.10 Другие функции char *strerror( int errornum ); Создает независимое от системы сообщение от ошибки на базе errornum Возвращает указатель на строку size_t strlen( const char *s ); Возвращает количество символов (до NULL ) в строке s 24
25 Инициализация переменных Вызов функции Результат 25 1/* Fig. 8.37: fig08_37.c 2 Using strerror */ 3#include 4#include 5 6int main() 7{7{ 8 printf( "%s\n", strerror( 2 ) ); 9 return 0; 10} No such file or directory
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.