- •Лабораторная работа № 5
- •Теоретические сведения
- •Описание переменных строкового типа
- •Инициализация переменных строкового типа
- •Инициализация массива строк
- •Ввод строки
- •Вывод строки
- •Доступ к компонентам строки
- •Выделение слов из строки
- •Формирование слова с помощью анализа компонентов строки
- •Формирование слова с помощью функции strtok
- •Формирование слова с помощью функции strpbrk
- •Примеры программирования
- •Контрольные вопросы
- •Функции работы со строками
- •Функции проверки символов
Вывод строки
Для вывода строк мы уже использовали операцию <<. Никаких особенностей при выводе этого типа данных она не имеет.
Вывод строки может осуществляться также с помощью функции puts(char *). Символы записываются в стандартный выводной поток, в конец строки добавляется символ конца строки ('\n'). Нуль-символ не выводится.
Пример 5.8.
puts (str);
puts (stroka);
Вывести строку можно с помощью функции printf. В этом случае нуль-символ не выводится, но и символ '\n' в конец строки не добавляется.
Пример 5.9.
printf ("%s", str);
printf ("%s %s\n", str, stroka);
printf ("%s\n%s\n", str, stroka);
Доступ к компонентам строки
При работе со строками можно обращаться и к отдельным символам в строке: str [3], str[0]. При этом следует помнить, что нумерация символов в строке начинается с 0, как и в массивах любого другого типа (int, float).
Библиотека языка С++ содержит ряд функций, работающих со строками. Прототипы этих функций находятся в файле string.h, поэтому в начале программы необходимо подключить данный файл:
#include <string.h>
Описание наиболее используемых функций работы со строками приведены в приложении к лабораторной работе.
Выделение слов из строки
Очень часто при работе со строками необходимо выделять слова, т.е. группу символов, находящуюся между символами-разделителями (пробелами, запятыми, точками и т.п.).
Сформировать слово можно несколькими способами.
Формирование слова с помощью анализа компонентов строки
Пример 5.10. Пусть введена строка символов str, разделенных пробелами. Анализируя каждый символ, сформируем слово в переменной word и выведем его на печать.
#include <iostream.h>
#include <conio.h>
#include <string.h>
void main(void)
{
char word[20];
char str[80];
int j=0; // Количество символов в слове word
clrscr();
cin.get(str,80);
|
for(int i=0;i<strlen(str);i++) |
// Пока не конец строки |
|
{ |
|
|
while(str[i]==' ') continue; |
// Пропуск пробелов в str |
|
while(str[i]!=' ' && str[i]!='\0') |
// Пока текущий символ не //пробел и не нуль-символ |
|
word[j++]=str[i++]; } |
// Формирование слова word |
|
word[j]='\0'; |
// Нуль-символ в конец слова |
|
cout<<word; |
// Вывод слова |
|
} |
|
Формирование слова с помощью функции strtok
Функция strtok позволяет выделять из строки слова, разделенные символами-разделителями. При первом обращении к функции необходимо указать строку, в которой происходит поиск слов, и строку из символов-разделителей. При последующем поиске вместо строки указывается NULL. К сожалению, данная функция портит содержимое исходной строки.
Пример 5.11.
|
char *word; |
|
|
word=strtok(str," ,.?"); |
// word - первое слово в строке |
|
while(word) |
|
|
{ |
|
|
cout<<word; |
|
|
word=strtok(NULL," ,.?"); |
// Следующее слово |
|
} |
|
Формирование слова с помощью функции strpbrk
Функция strpbrk находит в анализируемой строке str первое местоположение любого из заданных символов-разделителей. При этом содержимое исходной строки не изменяется.
Пример 5.12.
|
char* w, *word; |
|
|
w=strpbrk(str," ,.?"); |
//w указывает на символ-разделитель в str |
|
while(w!=NULL) |
// Цикл по всем словам |
|
{ |
|
|
n=w–str; |
// n - длина слова |
|
strncpy(word,str,n); |
// word - текущее слово |
|
word[n++]='\0'; |
// Нуль-символ в конец строки |
|
cout<<word; |
|
|
str+=n; |
// Анализ следующей части строки |
|
w=strpbrk(str," ,.?"); |
// Поиск символа-разделителя в stroka |
|
} |
|
