Функция char в си

Функция char в си

В программе строки могут определяться следующим образом:

  • как строковые константы;
  • как массивы символов;
  • через указатель на символьный тип;
  • как массивы строк.

Кроме того, должно быть предусмотрено выделение памяти для хранения строки.

Любая последовательность символов, заключенная в двойные кавычки «» , рассматривается как строковая константа .

Для корректного вывода любая строка должна заканчиваться нуль-символом ‘’ , целочисленное значение которого равно 0. При объявлении строковой константы нуль-символ добавляется к ней автоматически. Так, последовательность символов, представляющая собой строковую константу, будет размещена в оперативной памяти компьютера, включая нулевой байт.

Под хранение строки выделяются последовательно идущие ячейки оперативной памяти. Таким образом, строка представляет собой массив символов. Для хранения кода каждого символа строки отводится 1 байт.

Для помещения в строковую константу некоторых служебных символов используются символьные комбинации. Так, если необходимо включить в строку символ двойной кавычки, ему должен предшествовать символ «обратный слеш»: ‘»‘ .

Строковые константы размещаются в статической памяти. Начальный адрес последовательности символов в двойных кавычках трактуется как адрес строки. Строковые константы часто используются для осуществления диалога с пользователем в таких функциях, как printf() .

При определении массива символов необходимо сообщить компилятору требуемый размер памяти.

Компилятор также может самостоятельно определить размер массива символов, если инициализация массива задана при объявлении строковой константой:

В этом случае имена m2 и m3 являются указателями на первые элементы массивов:

  • m2 эквивалентно &m2[0]
  • m2[0] эквивалентно ‘Г’
  • m2[1] эквивалентно ‘o’
  • m3 эквивалентно &m3[0]
  • m3[2] эквивалентно ‘x’

При объявлении массива символов и инициализации его строковой константой можно явно указать размер массива, но указанный размер массива должен быть больше, чем размер инициализирующей строковой константы:

Для задания строки можно использовать указатель на символьный тип .

В этом случае объявление массива переменной m4 может быть присвоен адрес массива:

Здесь m3 является константой-указателем. Нельзя изменить m3 , так как это означало бы изменение положения (адреса) массива в памяти, в отличие от m4 .

Для указателя можно использовать операцию увеличения (перемещения на следующий символ):

Массивы символьных строк

Иногда в программах возникает необходимость описание массива символьных строк . В этом случае можно использовать индекс строки для доступа к нескольким разным строкам.

В этом случае poet является массивом, состоящим из четырех указателей на символьные строки. Каждая строка символов представляет собой символьный массив, поэтому имеется четыре указателя на массивы. Указатель poet[0] ссылается на первую строку:
*poet[0] эквивалентно ‘П’,
*poet[l] эквивалентно ‘-‘.

Инициализация выполняется по правилам, определенным для массивов.
Тексты в кавычках эквивалентны инициализации каждой строки в массиве. Запятая разделяет соседние
последовательности.
Кроме того, можно явно задавать размер строк символов, используя описание, подобное такому:

Разница заключается в том, что такая форма задает «прямоугольный» массив, в котором все строки имеют одинаковую длину.

Свободный массив

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

Большинство операций языка Си, имеющих дело со строками, работает с указателями. Для размещения в оперативной памяти строки символов необходимо:

  • выделить блок оперативной памяти под массив;
  • проинициализировать строку.

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

Для ввода строки использована функция scanf() , причем введенная строка не может превышать 9 символов. Последний символ будет содержать ‘’ .

Функции ввода строк

Для ввода строки может использоваться функция scanf() . Однако функция scanf() предназначена скорее для получения слова, а не строки. Если применять формат "%s" для ввода, строка вводится до (но не включая) следующего пустого символа, которым может быть пробел, табуляция или перевод строки.

Для ввода строки, включая пробелы, используется функция

В качестве аргумента функции передается указатель на строку, в которую осуществляется ввод. Функция просит пользователя ввести строку, которую она помещает в массив, пока пользователь не нажмет Enter.

Функции вывода строк

Для вывода строк можно воспользоваться рассмотренной ранее функцией

или в сокращенном формате

Для вывода строк также может использоваться функция

которая печатает строку s и переводит курсор на новую строку (в отличие от printf() ). Функция puts() также может использоваться для вывода строковых констант, заключенных в кавычки.

Функция ввода символов

Для ввода символов может использоваться функция

которая возвращает значение символа, введенного с клавиатуры. Указанная функция использовалась в рассмотренных ранее примерах для задержки окна консоли после выполнения программы до нажатия клавиши.

Функция вывода символов

Для вывода символов может использоваться функция

которая возвращает значение выводимого символа и выводит на экран символ, переданный в качестве аргумента.

Пример Посчитать количество введенных символов во введенной строке.

Результат выполнения

Основные функции стандартной библиотеки string.h

Основные функции стандартной библиотеки string.h приведены в таблице.

Функция Описание
присоединяет s2 к s1, возвращает s1
присоединяет не более n символов s2 к s1, завершает строку символом ‘’, возвращает s1
копирует строку s2 в строку s1, включая ‘’, возвращает s1
копирует не более n символов строки s2 в строку s1, возвращает s1;
сравнивает s1 и s2, возвращает значение 0, если строки эквивалентны
сравнивает не более n символов строк s1 и s2, возвращает значение 0, если начальные n символов строк эквивалентны
возвращает количество символов в строке s
заполняет строку s символами, код которых равен значению c, возвращает указатель на строку s
заменяет первые n символов строки s символами, код которых равен c, возвращает указатель на строку s
Читайте также:  Nokia с жестким диском

Пример использования функций

Результат выполнения

Функции для работы со строками и символами в Си

определяет длину указанной строки, без учёта нуль-символа

выполняет побайтное копирование символов из строки s2 в строку s1

выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1

объединяет строку s2 со строкой s1. Результат сохраняется в s1

объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1

сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 С учётом регистра

сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 С учётом регистра

сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 Без учёта регистра

сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1 s2 Без учёта регистра

возвращает значение true, если с является буквой или цифрой, и false в других случаях

возвращает значение true, если с является буквой, и false в других случаях

возвращает значение true, если с является цифрой, и false в других случаях

возвращает значение true, если с является буквой нижнего регистра, и false в других случаях

возвращает значение true, если с является буквой верхнего регистра, и false в других случаях

возвращает значение true, если с является пробелом, и false в других случаях

если символ с, является символом нижнего регистра, то функция возвращает преобразованный символ с в верхнем регистре, иначе символ возвращается без изменений.

поиск первого вхождения символа с в строке s. В случае удачного поиска возвращает указатель на место первого вхождения символа с. Если символ не найден, то возвращается ноль.

определяет длину начального сегмента строки s1, содержащего те символы, которые не входят в строку s2

возвращает длину начального сегмента строки s1, содержащего только те символы, которые входят в строку s2

Возвращает указатель первого вхождения любого символа строки s2 в строке s1

преобразует строку s1 в тип double

преобразует строку s1 в тип int

преобразует строку s1 в тип long int

Функции стандартной библиотеки ввода/вывода

считывает символ с со стандартного потока ввода, возвращает символ в формате int

считывает поток символов со стандартного устройства ввода в строку s до тех пор, пока не будет нажата клавиша ENTER

Функции для работы со строками — файлы string.h, stdlib.h

Прототип и краткое описание

double atof(char *str) ; Преобразует строку str в вещественное число типа double

int atoi(char *str) ; Преобразует строку str в десятичное целое число

long atol(char *str) ; Преобразует строку str в длинное десятичное целое число

char *itoa(int v, char *str, int baz) ; Преобразует целое v в строку str. При изображении числа используется основание baz (от 2 до 36). Для отрицательного числа и baz = 10 первый символ — минус(-)

char *ltoa(long v, char *str, int baz); Преобразует длинное целое v в строку str . При изображении числа используется основание baz (от 2 до 36)

char * strcat(char *sp, char *si); Приписывает строку si к строке sp (конкатенация строк)

char *strchr(char *str, int c) ; Ищет в строке str первое вхождение символа с

int strcmp(char *str1 , char *str2) ; Сравнивает строки str1 и str2 . Результат отрицателен, если strl меньше str2; равен нулю, если str1 равно str2 и положителен, если str1 больше str2 (сравнение беззнаковое)

char *strcpy(char *sp, char *si) ; Копирует байты строки si в строку sp

int strcspn(char *str1, char *str2) ; Определяет длину первого сегмента строки str1, содержащего символы, не входящие во множество символов строки str2

char *strdup(const char *str); Выделяет память и переносит в нее копию строки str

unsigned strlen(char *str); Вычисляет длину строки str

char *strlwr(char *str); Преобразует буквы верхнего регистра в строке в соответствующие буквы нижнего регистра

char *strncat(char *sp, char *si, int kol); Приписывает kol символов строки si к строке sp

int strncmp(char *str1, char *str2, int kol); Сравнивает части строк str1 и str2, причем рассматриваются первые kol символов. Результат отрицателен, если str1 меньше str2; равен нулю, если str1 равен str2, и положителен, если str1 больше str2

char *strncpy(char *sp, char *si, int kol); Колирует kol символов строки si в строку sp («хвост» отбрасывается или дополняется пробелами)

Читайте также:  Есть ли в фотошопе автосохранение

char *strnicmp(char *str1, char *str2, int kol); Сравнивает не более kol символов строки str1 и строки str2, не делая различия регистров

char *strnset(char *str, int с, int kol); Заменяет первые kol символов строки str символом с

char *strpbrk(char *str1, char *str2); Ищет в строке str1 первое появление любого из множества символов, входящих в строку str2

char *strrchr(char *str, int с); Ищет в строке str последнее вхождение символа с

int strset(char *str, int с); Заполняет строку str символом с

int strspn(char *str1, char *str2); Определяет длину первого сегмента строки str1, содержащего только символы, из множества символов строки str2

char *strstr(const char *str1, const char *str2); Ищет в строке str1 подстроки str2. Возвращает указатель на тот элемент в строке str1, с которого начинается подстрока str2

double *strtod(const char *str,char **endptr); Преобразует символьную строку str в число двойной точности. Если endpt нe равен null , то *endptr возвращает как указатель на символ, при достижении которого прекращено чтение строки str

char *strtok(char *str1, const char *str2); Ищет в строке str1 лексемы, выделенные символами из второй строки

long *strtol(const char *str ,char **endptr,intbaz); Преобразует символьную строку str к значению «длинное число» с основанием baz(от 2 до 36). Если endptr не равен null, то *endptr возвращается как указатель на символ, при достижении которого прекращено чтение строки str

char *strupr(char *str) Преобразует буквы нижнего регистра в строке в соответствующие буквы верхнего регистра

char *ultoa(unsigned long v, char *str, int baz); Преобразует беззнаковое длинное целое v в строку str

void *calloc(unsigned n, unsigned m) ; Возвращает указатель на начало области динамически распределенной памяти для размещения n элементов по m байт каждый. При неудачном завершении возвращает значение null

unsigned coreleft(void); — для моделей памяти tiny, small, medium. unsigned long coreleft(void); — для других моделей памяти. Возвращает значение объема неиспользованной памяти, функция, уникальная для DOS, где приняты упомянутые модели памяти

void free (void *bl); Освобождает ранее выделенный блок динамически распределенной памяти с адресом первого байта bl

void *malloc(unsigned s); Возвращает указатель на блок 0 динамически распределенной памяти длиной s байт. При неудачном завершении возвращает значение null

void *realloc(void *bl, unsigned ns); Изменяет размер ранее выделенной динамической памяти с адресом bl до размера ns байт. Если bl равен null, то функция выполняется как malloc()

Базовый тип для символов и строк char

Строки в языке С+ + — это последовательность символов, заключенная в кавычки. Строка — это массив символов, т.е. она всегда имеет тип char.

char str [0] = «среда»;

char str [10] =

Особенность строк:

    Транслятор, размещая строку в памяти, автоматически добавляет в нее символ конец строки ‘’, т.е. нулевой байт. Количество элементов в таком массиве на единицу больше, чем в изображении соответствующей строковой константы.

для строки «А» длина = 2 байта

для символа ‘А’ длина = 1 байт

  • При инициализации массива отдельными символами обязательно в конце массива указывается символ ‘’;
  • Инициализация символьного массива пробелами char str [80] = <‘ ‘>;
  • Ввод и вывод текстовой информации

    Процедуры ввода — вывода символа

    int ch;

    ch = getch ( ); — ввод кода нажатой клавиши без отображения соответствующего символа на экране

    ch = getche ( ); — ввод нажатой клавиши с соответствующего символа на экране

    ch = getcrar ( ); — ввод кода нажатой клавиши вслед за нажатием клавиши enter

    Вывод символа : putchar (C1)

    Процедуры ввода — вывода строки: gets (str) , puts (str)

    char str [80]; // объявление строки

    cout

    gets (str); // ввод строки

    puts (str); // вывод строки

    Стандартные программные решения

    1. Получить символ десятичной цифры из значения переменной, лежащей в диапазоне 0…9

    int n;

    char c;

    c = n + ‘0′;

    Получить значение целой переменной из символа десятичной цифры

    if ( c >= ‘0’ && c

    n = c — ‘0’;

    if (n

    else c = n- 10 + ‘A’;

  • Преобразовать строчную латинскую букву в прописную:
  • if (c >= ‘a’ && c

    Для работы со строками необходимо использовать заголовочный файл string.h

    Функции для работы со строками

    1.Определение длины строки strlen ( )

    char str [ ] = «0123456789»

    int l = strlen (str);

    cout

    Завершающий нулевой символ в длину строки входит.

    2.Копирование строк strcpy ( ), strncpy ( )

    char strcpy (str1, str2)

    Выполняется побайтное копирование символов из строки str2 в строку str1. Копирование прекращается только в случае достижения символа ‘’ (нуль- терминатор). Перед копированием необходимо проверить выполнение условия, что длина str2 меньше или равна длине str1. В противном случае возможно возникновение ошибок, связанных с наложением данных.

    strcpy (str, «Проверка копирования»);

    Копирование через указатели и копирование не всей строки
    char str1[20] = «Проверка копирования»;
    char str2[20];
    char *ptr = str1;
    ptr + = 9, // ptr указывает на слово «копирование»;
    strcpy (str2, ptr);
    cout
    Функция strncpy ( ) копирует n символов из строки S2 в строку S1.

    Пример: char str [40]

    Читайте также:  Как зайти под правами администратора windows 7

    strncpy (str, “Borland C+ +”,7)

    puts(str); // Borland

    3.Конкатенация (или присоединение) строк strcat ( )

    strncat ( ) – присоединение n символов из другой строки

    strcat (str1, str2)

    Строка str2 присоединяется к строке str1. Величина str1 должна быть достаточной для хранения объединенной строки.

    Пример: char str [80];

    strcpy (str, «Для продолжения»);

    strcat (str, «Нажмите клавишу»);

    Синтаксис: strncat (str1, str2, n)

    Пример: char str [80]; = “Языки программирования”;

    char str [30] = “ C+ +, Паскаль, Бейсик”;

    strncat (str1, str2, 13);

    puts(str1); // Языки программирования: С+ +, Паскаль

    4.Сравнение строк strcmp ( )

    Функция имеет тип int, так как данная функция выполняет сравнение двух строк str1 и str2, различая прописные и строчные буквы, в результате сравнения возвращает одно из следующих значений:

    Если результат функции

    Если результат функции = 0, то строки эквивалентны

    Если результат функции > 0, то str1 > str2

    Пример: str1 [ ] = «Borland»

    str2 [ ] = «BORLAND»

    int i;

    i = strcmp (str1, str2); // i = 32

    Распишем АСКИ-коды заданных строки и сравним их

    Borland 66 111 114 108 97 110 100

    BORLAND 66 79 82 76 65 78 68

    Разница между кодами символов строк = 32, результат больше 0, значит строка str1> str2

    Функция strncmp( ) проводит сравнение определенного числа первых символов двух строк. Регистр символов при этом учитывается.

    char str1 [ ] = «Ошибка открытия базы»;

    char str2 [ ] = «Ошибка открытия базы»;

    i =strncmp (str1, str2, 12)

    строки отличаются одним символом

    i > 0; str1 > str2;

    Функция stricmp() сравнивает строки, не различая регистра символов. Возвращается одно из следующих значений: i > 0, i = 0, i

    char str1 [ ] = «Moon»; char str2 [ ] = «MOON»;

    int i = strincmp (str1, str2);

    i=0, строки эквивалентны

    5.Преобразование строк: strlwr ( ), strupr ( ), strrev ( )

    strlwr ()- преобразует прописные буквы в строчные

    Пример: char str [ ] = «HELLO»;

    strupr ()- преобразует строчные буквы в прописные

    strrev ()- реверсирование строки, т.е. изменяет порядок следования символов на обратный.

    Пример: char str [ ] = “сон”;

    strrev (str); // нос

    6.Поиск символов

    strchr() — производит поиск символа в строке, указывает место первого вхождения символа в строку. Если символ не найден, функция возвращает NULL.

    Пример: char str [ ] = «абвгдеёжзийк»;

    pstr = strchr (str, ‘ж’);

    В результате работы программы указатель pstr будет указывать на подстроку «жзийк» в строке str.

    strrchr() — возвращает указатель на последний, совпадающий с заданным символом, символ в строке. Если символ не найден, возвращается значение NULL.

    Пример: char str [ ] = «абвгджизийк»;

    pstr = strrchr (str, ‘и’); // ийк

    strspn() — проводит сравнение символов одной строки с символами другой и возвращает позицию (начиная с нуля), в которой строки перестают совпадать.

    Функция проверяет каждый символ строки str на соответствие каждому из символов строки group. В результате работы, функция возвращает число совпавших символов.

    Пример: char str [ ] = «Загрузка параметров БД»;

    char substr [ ] = «Загрузка параметррррр»;

    int i = strspn (str, substr);

    cout

    символы совпадают до 17 позиции.

    Приведенная функция различает регистр символов.

    strcspn ( )— сопоставляет символы строки str1 и str2 и возвращает длину строки str1, не входящей в str2. С помощью этой функции можно определить, в какой позиции происходит перекрещение двух символьных массивов.

    Пример: char str [ ] = «abcdefghijk»;

    int k;

    k = strcspn (str, «elf»);

    k = 4 — в этой позиции строки имеют первый общий элемент.

    strpbrk() — отыскивает место вхождения в строку str1 любого из символов строки str2. Если символы найдены, возвращается место первого вхождения любого символа из str2 в строку str1. В противном случае функция возвращает NULL.

    Пример: char str1 [ ] = «abcdefghjk»;

    char str2 [ ] = «esb»;

    char *ptr;

    ptr = strpbrk (str1, str2);

    cout

    bcdefghjk, т.к. символ ‘b’ из строки str2 встречается в строке str1 раньше других.

    7.Поиск подстрок

    strstr ()- данная функция осуществляет сканирование строки str1 и находит место первого вхождения подстроки str2 в строку str1. В случае успешного поиска функция strstr() возвращает указатель на первый символ строки str, начиная с которого следует точное совпадение части str1 обязательно со всей лексемой str2. Если строка str2 не найдена в str1, возвращается NULL.

    Пример: c har str1 [80] = «Производится поиск элемента»;

    char str2 [80] = «Поиск»;

    char *ptr;

    ptr = strstr(str1, str2);

    cout

    strtok() — выполняет поиск в строке str подстроки, обрамленной с обеих сторон любым символом — разделителем из строки str1.

    strtok (str, str1);

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

    Пример со строками(Решение задачи можно посмотреть, скачав файл "Задача-18"):

    Подсчитать сумму цифр в строке.

    #include
    #include
    #include
    #include
    main()

    char str[30];
    int sum=0, i, k;
    cout =’0′)&&(str[i]

    Ссылка на основную публикацию
    Функции в вольфрам математика
    Функции пользователя Хотя в систему входят многие сотни встроенных функций (начиная от элементарных и кончая специальными математическими функциями и системными...
    Учимся рисовать в paint
    Серия видео уроков «Создание компьютерного рисунка в программе Paint» МОУ «Межборская средняя общеобразовательная школа» (Уроки предназначены для детей 9-12 лет,...
    Учиться без троек сканворд
    Музыкант, играющий на барабанах, тарелках Передовой работник производства (ударник) Часть затвора стрелкового оружия (ударник) "Барабанщик" коммунистического труда (устар.) (ударник) "Барабанщик"...
    Функция abs в паскале
    Возвращает абсолютную величину параметра. Объявление Function Abs(X) : (тип параметра); Режим Windows, Real, Protected Замечания Параметр X — выражение вещественного...
    Adblock detector