[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Приложение - Функции обработки строк

                        Операции над строками

Операции  над   строками,  ограниченными  символом  '\0',  описаны  на
странице Руководства STRING(3C).

Некоторые из  функций требуют  дополнительный  аргумент,  определяющий
количество символов, которые нужно переслать или сравнить. Эти функции
содержат  'n'   в  имени   -  strncat,  strncmp,  strncpy  -  и  могут
использоваться со строками, не завершающимися нулем.

Эти функции объявлены в <string.h>.

strlen возвращает количество  байтов в строке до завершающего нулевого
       байта, не считая сам этот байт.
strcmp,   strncmp сравнивает текстовые строки на равенство. Возвращает
       0, если  строки равны,  и  разность  между  первыми  различными
       символами s1 и s2, если они отличаются. Например, strcmp("abz",
       "abc") возвращает 23, а strncmp("abz", "abc", 2) возвращает 0.
strcpy,   strncpy копирует строку из s2 в s1. Функция strncpy копирует
       не более  n байтов и не записывает в качестве n+1-го символа 0.
       s1 должен указывать на достаточно большую область памяти, чтобы
       хранить копию s2.
strdup возвращает указатель на новую строку, являющуюся копией строки-
       параметра.  Память   под  новую   строку   получается   вызовом
       malloc(3C). Если  новая строка  не может  быть  создана,  будет
       возвращен нулевой указатель.
strcat,   strncat найти  конец s1 и добавить к нему строку s2. Область
       памяти  s1   должна  быть  достаточно  большой,  чтобы  хранить
       добавочные символы.
strchr,   strrchr первая  функция  (strchr)  возвращает  указатель  на
       первый символ c, найденный в строке s. strrchr находит в строке
       последний символ, равный c
       Например: static char word[] = "happy";
       strchr(word, 'p'); возвращает &word[2],
       strrchr(word, 'p'); возвращает &word[3].

strpbrk   возвращает указатель на первое вхождение в s1 любого символа
       из строки s2, или NULL, если таких символов не найдено.
       Например: static char s1[] = "chip"; strpbrk(s1, "aieou");
       возвращает &s1[2].

strstr возвращает указатель  на  первое  вхождение  подстроки  s2  (не
       считая ограничительного нуля) в строку s1, или NULL, если такая
       подстрока не найдена.
       Например: static char s1[] = "terrific";
       strstr(s1, "ifi") возвращает &s1[4].

strspn,   strcspn первая  функция возвращает длину начального сегмента
       s1, которая полностью состоит из символов s2. strcspn делает то
       же, но для символов, не содержащихся в s2.
       Например: strspn("happy", "pah") возвращает 4.

strtok выделяет лексемы  в строке  s1, разделенные  символами  из  s2.
       Обычно strtok  вызывается в цикле для поиска нескольких лексем.
       При первом вызове s1 представляет собой адрес исходного буфера.
       Для второго  и последующих  вызовов, если s1 равен NULL, strtok
       возобновит поиск  с  того  места,  где  он  остановился.  Когда
       достигнут  завершающий   нулевой  байт   в  строке  s1,  strtok
       возвращает 0.

STRING(3C)
#include <string.h>

Длина
  size_t strlen(const char *s)

Сравнение
  int strcmp(const char *s1, const char *s2)
  int strncmp(const char *s1,const char *s2, size_t n)

Перемещение
  char *strcpy(char *s1, const char *s2)
  char *strncpy(char *s1, const char *s2, size_t n)
  char *strdup(const char *s1)
  char *strcat(char *s1, const char *s2)
  char *strncat(char *s1, const char *s2, size_t n)

Поиск
  char *strchr(const char *s, int c)
  char *strrchr(const char *s, int c)
  char *strpbrk(const char *s1, const char *s2)
  char *strstr(const char *s1, const char *s2);
  size_t strspn(const char *s1, const char *s2)
  size_t strcspn(const char *s1, const char *s2)

Выделение
  char *strtok(char *s1, const char *s2)

                      Выделение лексем в строке

Эта программа печатает список всех слов, используемых в Си-программе.
Словами считаются имя идентификатора, ключевое слово или константа.
2         Включить файл, описывающий функцию strtok(3C).

8         Создать массив всех возможных разделителей.

11        Считать строку из файла.

13        Инициализировать s1 адресом входного буфера.

14        Искать следующую  лексему в   строке.  Значения разделителей
          могут меняться от вызова к вызову.

16        Распечатать  найденную  лексему.  Если  направить  вывод  на
          терминал, вы увидите, что выдача программы начнется с:

          include
          stdio
          h

17        Присвоить s1  значение NULL,  чтобы следующие  вызовы strtok
          начинались с только что найденной лексемы.

Исполните программу и пропустите ее вывод через sort, uniq и pr -5t.
На выходе получится таблица из 5 столбцов.
Файл: tokenize.c