- •Основные понятия
- •Определение С-строк
- •строка как массив символов
- •строка как указатель на char
- •особенности работы с С-строками в С++
- •Операции со строками
- •Инициализация строки
- •Возможные ошибки при работе со строками
- •Ввод-вывод строк
- •преобразование значения базового типа в С-строку
- •ввод ограниченного числа символов строки
- •функция вывода строки
- •особенности посимвольного вывода строки
- •Копирование строк
- •Оптимизация текста программы на примере функции копирования
- •Функции для работы с С-строками
- •Определение длины строки
- •Копирование строк
- •Объединение строк
- •Сравнение строк
- •Поиск символа в строке
- •Проверка принадлежности символа некоторому множеству
- •Поиск строки в строке
- •Преобразование и заполнение строк
- •преобразование строки в число
- •преобразование строчных символов строки в прописные и наоборот
- •реверс строки
- •заполнение строки символом
- •пример применения функций преобразования
- •Выделение лексем
- •Динамические строки
- •Копирование строки в динамическую строку
- •Передача строки в функцию в качестве параметра
- •Пример_1: в main()– строка-массив; в функции – строка-указатель
- •Пример_2: в main() – строка-указатель; в функции – строка-указатель
- •Передача в функцию массива строк
- •Примеры работы со строками
- •Определение длины строки с помощью функции пользователя
- •Реверс строки (перегрузка функций)
- •Удаление начальных пробелов из строки
- •Проверка, является ли строка целым числом
- •Проверка, является ли строка 16-ичным целым числом
- •Проверка, является ли строка дробным числом без знака
- •Перевод двоичного числа в десятичное
- •Перевод шестнадцатеричного числа в десятичное
- •Перевод десятичного числа в двоичное
- •Перевод десятичного числа в с/с от 2-х до 10
- •Перевод десятичного числа в шестнадцатеричное
- •Определение количества слов в фразе
- •Выделение слов в тексте по нажатию произвольной клавиши
- •Сортировка вводимых с клавиатуры строк *
- •Сортировка строк в зависимости от признака, передаваемого функции main() через аргумент argv *
- •Инвертирование строки с помощью рекурсивной функции
возвращает указатель на начало строки, полученной в результате реверса строки s.
заполнение строки символом
Функция char * strset (char *s, int ch)
помещает символ ch во все позиции строки s.
пример применения функций преобразования
//пример_5
#include <cstdlib> int main()
{
char a[ ] = "10) rost – 162 cm, ves – 59.5 kg"; int num;
long rost; double ves;
num = atoi(a); |
//преобразование, начиная с символа 1 |
с индексом 0 и до символа ‘)’ |
|||||
rost = |
atol |
(&a[11]); |
//преобразование, начиная с символа 1 |
с индексом 11 |
и до ‘пробела’ |
||
ves = |
atof |
(&a[25]); |
//преобразование, начиная с символа 5 |
с индексом 25 |
и до ‘пробела’ |
||
cout << num |
<< " " << rost << " " << ves; //10 |
162 |
59.5 |
|
|||
_getch(); |
|
|
|
|
|
|
|
return |
0; |
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Выделение лексем
Функция char * strtok (char *s1, const char *s2)
позволяет разбить строку на лексемы (слова, предложения). Она возвращает из строки следующую лексему, отделенную любым разделителем (пробел, точка с запятой, дефис), и указатель, ссылающийся на следующий символ, начиная с которого должен осуществляться поиск следующей лексемы:
#include <string.h> |
|
|
|
|
|
int main() |
|
|
|
|
|
{ char string[ ] = "this sentence;has-5words."; |
|
|
|||
char *tokenPtr; |
|
|
|
|
|
cout << string << endl << "by the words:" << endl; |
|
|
|||
tokenPtr = strtok (string, " ;-."); //пробел, ;, -, . |
– разделители |
||||
while (tokenPtr !=NULL) |
|
|
|
|
|
{cout << tokenPtr << endl; |
|
|
|
||
tokenPtr = strtok (NULL," ;-."); //при последующем вызове |
|
||||
} |
//нулевой указатель передается в качестве первого параметра |
||||
|
|
|
|
|
|
_getch(); |
|
|
|
|
|
return 0; |
|
|
|
|
|
} |
tokenPtr |
= strtok |
(NULL," ;-."); |
|
|
Вызо в |
трактуется |
так, будто первый |
|||
аргумент |
указывает на |
символ, |
следующий непосредственно |
после 0-символа, |
записанного в строку string после первого выделения лексемы. Таким образом, в нашем примере, после выделения первого слова указатель token содержит адрес первого символа еще не просмотренной части строки. После просмотра всей строки он будет указывать на символ-разделитель в конце строки (‘.’).
Очевидно, что при включении в список разделителей символов, завершающих предложение (. ! ?), мы получим выделение в качестве лексем – предложений, а при включении в список разделителей символов, разделяющих слова (пробел . , ; –), мы получим выделение в качестве лексем – слов.
Программирование – лекция 13 (лекции Стрикелевой Л.В.) |
23 |
|