- •Лабораторная работа № 1
- •5.1 Линейная программа
- •Далее создадим файл:
- •Задания1
- •Лабораторная работа № 2
- •7. Варианты задания
- •Лабораторная работа № 3
- •5.2 Оператор if
- •Лабораторная работа № 4
- •Лабораторная работа № 5
- •Задание 2. Циклический вычислительный процесс конечные суммы и произведения
- •Лабораторная работа № 6
- •Лабораторная работа № 7
- •5.1 Одномерный массив
- •5.3 Индексация с помощью указателей
- •Лабораторная работа № 8
- •Лабораторная работа № 9
- •Лабораторная работа № 11
- •Задача 2. Параметры функции
- •Лабораторная работа № 12
- •Лабораторная работа № 13
- •5. Содержание отчета
- •Лабораторная работа № 14
- •5. Содержание отчета
- •Решение уравнения методом деления отрезка пополам (бисекций)
- •Лабораторная работа № 15
- •6.2.1 Метод средних прямоугольников
- •6.2.1 Метод трапеций
- •Лабораторная работа № 10
- •Лабораторная работа № 16
- •5. Содержание отчета
- •Директива #include
- •7. Методические указания
- •8. Варианты заданий.
- •Лабораторная работа № 17
- •Лабораторная работа № 18
- •Лабораторная работа № 19
- •5. Содержание отчета
- •6.1.1 Доступ к элементам структуры
- •6.1.2 Присваивание структур
- •Лабораторная работа № 20
- •Например, формула
- •Задание на программирование
Лабораторная работа № 9
Тема: «Обработка строк»
Цель работы
Получение практических навыков в работе со строками.
Техническое обеспечение
2.1 Персональная ЭВМ типа IBM PC/386 и позднее.
Клавиатура.
Дисплей.
Принтер.
Программное обеспечение
Операционная система Windows
Система программирования Visual C++ версия 6.0 или Borland C++ версия 3.1 и более поздние версии.
Постановка задачи
Для конкретного варианта ввести строку и выполнить над ней указанные действия. Написать программу, которая работает с любым набором данных. Входную информацию и результаты счета вывести на печать, снабдив их соответствующими заголовками.
Содержание отчета.
5.1 Тема и цель работы.
5.2 Схема алгоритма решения.
5.3 Текст программы.
5.4 Результаты выполнения программы
Общие сведения
Строки
Строка представляет собой массив символов, заканчивающийся нуль-символом. Нуль-символ — это символ с кодом, равным 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 символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Вывести слова данной строки с указанием длины каждого слова.