Для представления текстовой информации в языке С+ + используются символы (константы), символьные переменные и строки (строковые константы) для которых в языке С+ + не введено отдельного типа в отличии от некоторых других языков программирования.
Базовый тип для символов и строк char
Строки в языке С+ + - это последовательность символов, заключенная в кавычки. Строка - это массив символов, т.е. она всегда имеет тип char.
char str [0] = «среда»;
char str [10] = {‘с', 'р', 'е', 'д', 'а', '\0'}
Особенность строк:
- Транслятор, размещая строку в памяти, автоматически добавляет в нее символ конец строки '\0', т.е. нулевой байт. Количество элементов в таком массиве на единицу больше, чем в изображении соответствующей строковой константы.
для строки «А» длина = 2 байта
для символа 'А' длина = 1 байт
- При инициализации массива отдельными символами обязательно в конце массива указывается символ '\0';
- Инициализация символьного массива пробелами 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); // вывод строки
Стандартные программные решения
- Получить символ десятичной цифры из значения переменной, лежащей в диапазоне 0…9
int n;
char c;
c = n + ‘0';
- Получить значение целой переменной из символа десятичной цифры
if ( c >= '0' && c <= '9');
n = c - '0';
- Получить символ шеснадцатиричной цифры из значения целой переменной, лежащей в диапазоне 0…15
if (n <= 9) c = n + '0';
else c = n- 10 + 'A';
- Преобразовать строчную латинскую букву в прописную:
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;
}
|