Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семинары по информатике.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
228.35 Кб
Скачать

Семинар №5

Работа со строками

1) Символьная константа "..." ;

2) Одномерный массив символов .

Пример :

char* os = "UNIX" ;

char web[4] ;

web[0] = web[1] = web[2] = 'w' ;

web[3] = '\0' ;

char wm[ ] = "kde"

char wm2[ ] = { 'k', 'd', 'e', '\0' }

unsigned char* str ;

char* str ;

Основные функции работы со строками :

1) Вычисление длины .

2) Копирование .

3) Конкитенация .

4) Сравнение .

5) Поиск .

6) Функция лексического разбора.

Для работа следующих функций необходим заголовочный файл <string.h> .

1. Измерительные функции :

unsigned strlen ( const char* str) ;

- возвращает длину символьной строки по адресу str. Длина в байтах ( и равна количеству символов ) до завершающего кода.

Пример :

printf( "%d \n", strlen("Linux") ) ; // Результат : 5

unsigned strspn ( const char* str, const char* delimit ) ;

- вычисляет максимальную длину начального фрагмента исходной строки по адресу str, который состоит из символов ограничительной строки delimit.

strcspn

- аналогичен предыдущей функции, но вычисляет то, что не содержит ограничительная строка.

Пример :

strspn ("happy", "path") // Результат : 4

strcspn ("happy", "path") // Результат : 0

2. Функции копирования.

char* strcpy ( char* dest , const char* src ) ;

char* strncpy ( char* dest , const char* src , unsigned num ) ;

- обе функции предназначены для копирования исходной строки src в массив символов dest. strcpy копирует целиком, strncpy копирует не более, чем num начальных символов.

При успешном завершении возвращают адрес dest.

Пример :

char os[6] ;

strcpy ( os, "Xenix" ) ; // Результат : Xenix

strncpy ( os, "Mistake" ) ; // Результат : Minix

strncpy ( os, "M", 2 ) ; // Результат : "M" (так как далее идёт \0)

3. Операции конкитенации.

char* strcat ( char* dest , const char* src ) ;

char* strncat ( char* dest , const char* src , unsigned num ) ;

- обе функции выполняют конкитенацию двух строк, добавляя копию всего или части содержимого строки src в конец dest. При слиянии символ с нулевым байтом в dest перекрывается началом из src. В конце конкитенации автоматически добавляется нулевой байт. Результирующая строка находится в dest.

Пример :

char sen[64] ;

strcpy ( sen, "I like " ) ;

strcat ( sen, "C language" ) ;

{ puts(sen) - вывод без форматирования }

4. Операция сравнения (лексиграфическое).

int strcmp( const char* str1 , const char* str2) ;

int strncmp ( const char* str1 , const char* str2, unsigned num) ;

- обе функции выполняют лексиграфическое сравнение строк str1 и str2 , последовательно сопоставляя коды их символов. Обе функции прерывают сравнение, если встретят '\0' . Во многих реализациях ненулевой код возврата равен разности кодов первых несовпадающих символов сравниваемых строк. В некоторых реализациях возвращается -1 (меньше) или 1 (больше).

5. Оператор поиска.

1) char* strchr ( const char* str, int code ) ;

2) char* strrchr ( const char* str, int code ) ;

3) char* strpbrk ( const char* str, const char* key ) ;

4) char* strstr ( const char* str, const char* key ) ;

- указатель str передаёт адрес исходной строки символов, где требуется найти символьный объект, заданный вторым аргументом : code или key.

Первые две функции предназначены для поиска первого (для strchr ) или последнего ( для strrchr ) вхождения символа code в строке str . Возвращается адрес, если успех. Иначе - NULL.

Функция strpbrk предназначена для поиска первого символа исходной строки, которой совпадает с одним из символов ключевой строки.

Функция strstr обеспечивает поиск первого вхождения в исходную строку последовательности символов ключевой строки без учёта ' \0 ' .

6. Функция лексиграфического разбора.

char* strtok ( char* str, char* delimit ) ;

- рассматриваем исходную строку символов по адресу str как набор лексем, которые разделены в ней промежутками из одного или нескольких строки ограничителей, адресованной указателем delimit.

В приведенной транскрипции функция strtok выполняет поиск первой лексемы исходной строки символов. Поиск остальных лексем гарантирует последовательность вызовов функции strtok , в которых адрес исходной строки заменяет нулевой указатель NULL, а строки ограничителей необязательно идентичны.

Пример :

char* nom ;

char* denom ;

char fraction[ ] = " 1 / 100 " ;

nom = strtok ( fraction, " / " ) ;

denom = strtok ( NULL , " / " ) ;

puts(nom) ; // Результат : 1

puts(denom) ; // Результат : 100

#include<string.h>

int main ( int argc, char* argv[ ] ) // argc - число элементов командной строки

{ // argv[ ] - массив указателей на слова командной строки

char* p ; // Адрес записи текущего двоичного числа.

char* m = 0 ; // Адрес записи максимального двоичного числа.

int i = 0 ; // Индекс текущего элемента.

int n = 0 ; // Номер максимального двоичного числа.

while ( ++i < argc )

{

if ( strspn ( argv[ i ] , "01" ) != strlen ( argv[ i ] )

continue;

if ( ( p=strchr ( argv[ i ], '1' ) ) == NULL )

continue;

if ( strcmp( m, p ) > 0 )

continue;

m = p ; n = i ;

}

return(n);

}

Запуск :

$ a.out file.txt 3

argv[0] содержит адрес на a.out

argv[1] - на file.txt

argv[2] - "3"

Задание :

Проверить результат работы с аргументами 1000 1111 .