Четверг, 23.01.2025, 15:46
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++

Функции работы со строками из библиотеки обработки строк

В этом разделе мы познакомимся с некоторыми типичными функциями стандартной библиотеки string.h. Это библиотека обработки строк, которая обеспечивает много полезных функций для работы со строковыми данными, например, сравнение строк, поиск в строках символов и других подстрок, разметку строк (разделение строк на логические куски) и определение длины строки.

  1. Функция int strlen (const char* s); - определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому символу. Обратите внимание, завершающий ноль-символ в длину не включается. Например,
    cout << strlen("Hello!"); // на экране будет 6
    
    char *str = "one";
    cout << strlen(str); // на экране будет 3
    
  2. Функция char *strcpy(char *s1, const char *s2); - копирует строку s2 в массив символов s1. Возвращает значение s1. Массив символов s1 должен быть достаточно большим, чтобы хранить строку и ее завершающий нулевой символ, который также копируется. Например,
    char str[25]; // объявляем символьный массив из 25 элементов
    char *ps = new char [25]; /* объявляем указатель на символ и 
    динамически выделяем память под 25 символов */
    
    strcpy(str, "ABCDE"); // копируем в str строковыю константу "ABCDE"
    cout << str; // выводим str на экран. На экране будет ABCDE
    
    strcpy(ps, "QWERTY"); // копируем в ps строковыю константу "QWERTY"
    cout << ps; // выводим ps на экран. На экране будет QWERTY
    
    delete[] ps; // освобождаем память 
    
    Обратите внимание, если Вы хотите, чтобы одна строка содержала другую, Вы должны скопировать ее содержимое, а не присвоить! Так, например, в данном случае инструкция ps = "QWERTY" была бы ошибочна. Компилятор, встречая такую инструкцию, создают строку "QWERTY", за которой следует нулевой символ и присваивает значение начального адреса этой строки (адреса символа Q) переменной ps. Таким образом, теряется исходное значение ps, а значит невозможно корректно освободить память под ps.
  3. Функция int *strcmp(const char *s1, const char *s2); - сравнивает строки s1 и s2 (по ASCII-кодам). Функция возвращает значение 0, если строки s1 и s2 равны, значение меньше ноля, если строка s1 меньше s2, и значение больше ноля, если s1 больше s2. Обратите внимание, строки сравниваются не по длине, а посимвольно, по ASCII-кодам ( т.е. "g" больше "ff"). Например,
    cout << strcmp("compare", "string"); /* на экране будет -1, поскольку 
     "compare" меньше "string" */
    
    cout << strcmp("abcde", "abc"); /* на экране будет 1, поскольку 
     "abcde" больше "abc" */
    
    cout << strcmp("one", "one"); /* на экране будет 0, поскольку 
     строки равны */
    
  4. Функция char *strcat(char *s1, const char *s2); - добавляет строку s2 к строке s1. Первый символ строки s2 записывается поверх ноль-символа строки s1. Возвращает s1. Под s1 должно быть выделено памяти не меньше чем (strlen(s1)+strlen(s2)+1). Например,
    char st1[25] = "День";
    cout << strcat(st1, " добрый!"); // на экране будет День добрый!
  5. Функция char *strncpy(char *s1, const char *s2, int n); - копирует не болеее n символов строки s2 в массив символов s1. Возвращает s1.
  6. Функция char *strncmp(char *s1, const char *s2, int n); - сравнивает до n символов строки s1 со строкой s2. Возвращает 0, меньше, чем 0 или больше, чем 0, если s1 соответственно равн, меньше или больше s2.
  7. Функция char *strncat(char *s1, const char *s2, int n); - присоединяет первые n символов строки s2 в строку s1. Возвращает s1.
  8. Функция char *strchr(const char *s, int c); - проверяет строку s на содержание символа хранящегося в c. Результатом функции является адрес первого вхождения символа c в строку s. Если символ не найден, возващается NULL. Например,
    char str[20] = "ABCDEXYZ";
    cout << strchr(str, 'X'); // на экране будет XYZ 

    или

    char str[20] = "ABCDEXYZ";
    if (strchr(str, 'q') == NULL) cout << "Нет такого символа!";
    
  9. Функция char *strstr(const char *s1, const char *s2); - проверяет строку s1 на содержание подстроки s2. Результатом функции является адрес первого вхождения подстроки s2 в строку s1. Если подстрока не найдена, возващается NULL. Например,
    char str[20] = "ABCDEXYZ";
    char *ps = strstr(str, "DEX");
    if (ps != NULL) 
     cout << ps;
    else 
     cout << "Нет такой подстроки!";
    
    // На экране будет DEXYZ
  10. Функция char *strlwr(char *s); - конвертирует строку к нижнему регистру (т.е. переводит строку в строчные символы). Например,
    char str[30] = "ABCDE_123_ijk_XYZ";
    cout << strlwr(str);
    
    // на экране будет abcde_123_ijk_xyz
  11. Функция char *strupr(char *s); - конвертирует строку к верхнему регистру (т.е. переводит строку в прописные символы).
  12. Функция char *strset(char *s, int ch); - заменяет ВСЕ символы в строке s на символ ch. Например,
    char str[30] = "ABCDE";
    cout << strset(str, 'x'); // на экране будет xxxxx
  13. Функция char *strnset(char *s, int ch, int n); - заменяет первые n символов в строке s на символ ch.
  14. Функция char *strrev(char *s); - меняет порядок следования символов в строке на противоположный (меняет первый символ с последним, второй символ с предпоследним и т.д.). Например,
    char str[30] = "12345";
    cout << strrev(str); // на экране будет 54321

Типичная ошибка программирования. Забывают включить заголовочный файл string.h при использовании функций из библиотеки обработки строк.

Также, мы хотим Вас познакомить с двумя функциями, которые могут помочь программисту при чтении с клавиатуры символов:

Функция int getch(void); - возвращает ASCII-код нажатой клавиши. Функция int getche(void); - возвращает ASCII-код нажатой клавиши и выводит символ на экран.

Прототипы последних двух функций описаны в файле conio.h, который входит в стандартную библиотеку языка С++.

Категория: c++ | Добавил: slava (12.05.2011)
Просмотров: 12728 | Рейтинг: 3.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]