Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / C++ / C++ / 05_строки_a5.doc
Скачиваний:
54
Добавлен:
17.04.2013
Размер:
181.76 Кб
Скачать

Вывод строки

Для вывода строк мы уже использовали операцию <<. Никаких особенностей при выводе этого типа данных она не имеет.

Вывод строки может осуществляться также с помощью функции 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

}

Соседние файлы в папке C++