Символы в языке С+ +

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

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

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

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

char str [10] = {‘с', 'р', 'е', 'д', 'а', '\0'}

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

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

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

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

  2. При инициализации массива отдельными символами обязательно в конце массива указывается символ '\0';
  3. Инициализация символьного  массива пробелами 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';

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

    if ( c >= '0' && c <= '9');

    n = c - '0';

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

    if (n <= 9)  c = n + '0';

    else  c = n- 10 + 'A';

  4. Преобразовать строчную латинскую букву в прописную:

     if (c >= 'a' && c <= 'z')  c = c- 'a' + 'A';

Строки <string.h>

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

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

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

char str [ ] = «0123456789»

int l = strlen (str);

cout << «l = » << l;        l =11

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

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

char strcpy (str1, str2)

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

char str [20];

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

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

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

       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, то  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 [ ] = «Ошибка открытия базы»;

int i

i =strncmp (str1, str2, 12)

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

i > 0; str1 > str2;

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

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

int i = strincmp (str1, str2); 

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

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

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

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

strlwr (str);

cout << str          // hello;

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

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

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

                     strrev (str);   // нос

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

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

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

                char *pstr;

                pstr = strchr (str, 'ж');

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

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

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

                 char  *pstr;

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

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

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

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

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

         int i = strspn (str, substr);

         cout << i;    // i=17

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

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

strcspn ( )-

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 << ptr;                

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

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

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

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

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

          char *ptr;

          ptr = strstr(str1, str2);

          cout << ptr ;  // поиск элемента.

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

strtok (str, str1);

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

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

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

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
main()
{//clrscr();
 char str[30];
 int sum=0, i, k;
 cout<<"Vvedite predlogenie"<<'\n';
 gets(str);
 k=strlen(str);
 for(i=0; i<k; i++)
    {if ((str[i]>='0')&&(str[i]<='9'))
     sum=sum+str[i]-'0';
    };
 cout<<sum<<'\n';
 return 0;
}

Четверг, 09.05.2024, 00:23
Приветствую Вас Гость