Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по программированию.doc
Скачиваний:
37
Добавлен:
29.02.2016
Размер:
1.78 Mб
Скачать

Лабораторная работа № 9

Тема: «Обработка строк»

  1. Цель работы

Получение практических навыков в работе со строками.

  1. Техническое обеспечение

2.1 Персональная ЭВМ типа IBM PC/386 и позднее.

    1. Клавиатура.

    2. Дисплей.

    3. Принтер.

  1. Программное обеспечение

    1. Операционная система Windows

    2. Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.

  1. Постановка задачи

Для конкретного варианта ввести строку и выполнить над ней указанные действия. Написать программу, которая работает с любым набором данных. Входную информацию и результаты счета вывести на печать, снабдив их соответствующими заголовками.

  1. Содержание отчета.

5.1 Тема и цель работы.

5.2 Схема алгоритма решения.

5.3 Текст программы.

5.4 Результаты выполнения программы

  1. Общие сведения

Строки

Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ — это символ с кодом, равным 0, что записывается в виде управляющей последовательности '\0'. По положению нуль-символа определяется фактическая длина строки. Строку можно инициализировать строковым литералом :

char str[10] = "Vasia";

// выделено 10 элементов с номерами от 0 до 9

// первые элементы - 'V . 'а', 's', ' i', 'а’, '\0'

При вводе строк функция cin считывает последовательность введенных символов до первого пробела.

Поэтому для ввода строк состоящих из нескольких слов, используется метод getline объекта cin, который считывает n-1 или менее символов и записывает их в строковую переменную.

Пример использования:

#include<iostream.h>

int main()

{ const int n=80;

char str[n]; //объявление строки

cin.getline(str,n); //ввод строки

cout<<s<<endl; //вывод строки

return 0;

}

Функции работы со строками.

Находятся в библиотеке string.h

Действие

Вид функции

Пример использования

1.Присваивание строк

char *strcpy (char *str1, const char *str2)

используется для копирования содержимого str2 в str1.

Следующая фрагмент кода копирует “hello” в строку str:

char str[80];

strcpy(str,”hello”);

2. Длина строки

size_t strlen (const char *str)

возвращает длину строки. При определении длины строки нулевой символ не учитывается.

Данный фрагмент кода выводит на экран число 5.

strcpy(s,”hello”);

int n;

n=strlen(s);

cout<<n;

3. Функция соединения строк

char *strcat (char *str1, const char *str2)

конкатенирует (соединяет в цепочку) строку str1 и копию строки str2. Строка str2 остается в первоначальном виде.

#include <iostream.h>

#include <string.h>

int main(void)

{ char s1[80],s2[80];

cin.getline(s1,80);

cin.getline(s2,80);

strcat(s2,s1);

cout<<s2<<endl;

return 0;}

4. Поиск символа в строке.

char *strchr (const char *str, int ch)

возвращает указатель на первое вхождение символа ch в строку, на которую указывает str. Если символ ch не найден, возвращается нулевой указатель NULL.

Следующая программа выведет строку ”is a test”:

#include <iostream.h>

#include <string.h>

int main(void)

{char *p;

p = strchr(“this is a test”,’ ‘);

cout<<p<<endl;

return 0;

}

5. Сравнение строк

char *strcmp ( char *str1, char *str2)

выполняет алфавитное сравнение двух строк, оканчивающихся нулевыми символами, и возвращает целое число со следующим значением:

Число Значение

Меньше 0 str1 меньше, чем str2

Равно 0 str1 равна str2

Больше 0 str1 больше, чем str2

Следующая функция используется для проверки пароля

char s[80];

cout<<“Введи пароль: “;

cin.getline(s,80);

if(strcmp(s, “pass”)) {

cout<<“Неправильный пароль.”;

}

6. Поиск подстроки в строке

char *strstr (char *str1, char *str2)

возвращает указатель на первое вхождение в строку, на которую указывает str1, строки, указанной str2 . Если совпадений не обнаружено, возвращается нулевой указатель NULL.

char *p;

char s1[80],s2[80];

cin.getline(s1,80);

cin.getline(s2,80);

p = strstr(s1,s2)

if(p) cout<<”Входит s2 в s1”;

else cout<<”Не входит s2 в s1”;

7. Выделение слов в строке

char *strtok (char *str1, char *str2)

возвращает указатель на следующую лексему в строке, на которую указывает str1. Символы из строки, на которую указывает str2, используются как ограничители, определяющие лексему. Если лексема не найдена, то возвращается NULL.

#include <iostream.h>

#include <string.h>

int main(void)

{char *p;

char s[80];

int i;

cin.getline(s,80);

//выделение слова

p = strtok(s," \n");

i=1;

cout<<i<<" "<<p<<endl;

while(p = strtok(NULL," \n"))

{ i++;

cout<<i<<" "<<p<<endl;

}

return 0;}

Задание 1

1) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов в данной строке.

2) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов в строке, начинающихся с буквы “с”.

3) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого короткого слова.

4) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество букв “a” в каждом слове данной строки.

5) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов из 3 букв в данной строке.

6) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов в строке, заканчивающихся на буквы “а”.

7) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Найти длину самого длинного слова.

8) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Подсчитать количество слов, содержащих букву “a”.

9) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Проверить упорядочены ли слова в алфавитном порядке.

10) Дана строка, состоящая из n символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Вывести слова данной строки с указанием длины каждого слова.