- •Міністерство освіти та науки україни
- •Аннотация
- •Анотація
- •Лабораторная работа 1 “Одномерный массив - вектор”
- •1. Общие указания
- •2. Пример реализации
- •3. Варианты задания
- •4. Требования к отчету
- •2. Пример реализации
- •3. Варианты задания
- •4. Требования к отчету
- •1.2. Динамические структуры данных: стек, очередь список
- •2. Пример реализации
- •4.Варианты заданий
- •Порядок выполнения работы.
- •Лабораторная работа №4 “Обработка строк”
- •1. Общие указания
- •2.1. Функции ввода/вывода строк
- •2.2. Другие функции работы со строками
- •3. Пример реализации класса «строка»
- •3.1. Класс Слово (word)(строка в одно слово)
- •3.2. Класс Сообщение (Message)(строка длиной до 80 символов (одна экранная строка)
- •3.3. Класс Предложение (sentence) (Строка, состоящая из одного Предложения, занимающего одну или более строк)
- •4. Варианты задания
- •5. Требования к отчету
- •2. Варианты задания
- •3. Содержание отчета
- •Лабораторная работа 6 “Множественное наследование”
- •1. Общие указания
- •4.Варианты заданий
- •Приложение b Терминологический словарь
Лабораторная работа №4 “Обработка строк”
Цель. Освоение основ технологии объектно-ориентированного программирования на примере создания класса «строка».
1. Общие указания
В С++ поддерживаются два типа строк – встроенный тип, доставшийся от С (С-строки у Страуструпа [11] или строковый литерал), и класс srting из стандартной библиотеки С++. В этой лабораторной Вы будете работать со строковым литералом.
Строка – это массив символов. Один символ занимает один байт. Строка заканчивается нулевым байтом (символом ‘\0’).
Таким образом, строка определяется тройкой:
Начальный адрес (логическое имя строки символов).
Тип символов
Кол-во элементов данного типа (длина строки).
Память класса имеет вид
[private: ]
<тип> *<имя>; // строка
int len; // длина строки
Методы класса
Обязательными есть конструктор[ы], деструктор;
Необходимыми есть ввод, вывод элементов вектора;
3 функции обработки, в соответствии с вариантом задания;
Описание строки
Строка может быть описана
1) как массив с инициализацией: char message[ ] = “now is the time”;
2) как массив с фиксированным количеством символов: char st1[10], str[20];
3) как динамический массив (через указатель): char *ps, *pt;
Размещение в памяти
Строка размещается в памяти следующим образом:
I |
|
a |
m |
|
a |
|
s |
t |
r |
i |
n |
g |
‘\0’ |
Для следующего массива строк
char* menu[] = {“Big Mac”,”Hamburger”, “Cheeseburger”, “Coca”, “Pepsi”};
Внутреннее представление имеет вид:
Menu[0] |
|
|
B |
i |
g |
|
M |
a |
c |
‘\0’ |
Menu[1] |
|
|
|
|
|
|
|
|
|
|
Menu[2] |
|
. . . |
|
|
|
|
|
|
|
|
menu[3] |
|
|
|
|
|
|
|
|
|
|
menu[4] |
|
|
P |
e |
p |
s |
i |
‘\0’ |
|
|
Использование строк в приложениях
Все информационные системы используют строки или массивы строк.
2. Примеры работы со строками в C с использованием библиотеки <string.h> .
Эта библиотека содержит ряд функций работы со строковыми литералами.
Пример 1.
//Ввести математическое выражение в виде строки.
//Перед и после каждого знака арифметической операции
//(+,-,*,/) вставить один пробел
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char *s1=””; //исходная строка
char *s2=””; //результирующая строка
char *bl=" "; //пробел
char s[1]; //одиночный символ в строке
int i,j,k,l,n;
clrscr();//очистка экрана
printf("\n Input string - mathematical expression\n");
gets(s1);
l=strlen(s1); //определение длины строки
printf("\n Length of input string = %d",l);
//копируем первый символ из s1 в s2
strncpy(s2,s1,1);
printf("\n i=0 ");
puts(s2);
for (i=1; i<l;i++)
{
//копируем i-тый символ в s[0]
s[0]=*(s1+i);
//если это арифметическая операция
if ( (s[0]=='+')||(s[0]=='-')||
(s[0]=='/')||(s[0]=='*') )
{
//то, копируем пробел,i-тый символ и пробел в s2
strncat(s2,bl,1);
strncat(s2,s,1);
strncat(s2,bl,1);
}
else
// копируем только i-тый символ в s2
strncat(s2,s,1);
printf("i=%d ",i); puts(s2);
}
printf("\n Length of new string = %d",strlen(s2));
printf("\n New string ="); puts(s2);
getch();
}
Пример 2.
//Конвертирование теста программы на Паскале в C++
//Надо заменить символ '/*' на '{' и '*/' на '}'
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char *s1=””; //input string
char *s2=””; //result string
char *sn1="*";
char *sn2="/";
char s[1]; //одиночный символ в строке
int i,j,k,l,n;
clrscr();
printf("\n Input string - part of pascal program\n");
gets(s1);
l=strlen(s1);
printf("\n Length of input string = %d\n",l);
s2=""; //empty string
for (i=0; i<l;i++)
{
//копируем i-тый символ в s[0]
s[0]=*(s1+i);
if (s[0]=='{')
{
//copy to s2 new symbol 1
strncat(s2,sn2,1);
strncat(s2,sn1,1);
}
else
{
if (s[0]=='}')
{
//copy to s2 new symbol 2
strncat(s2,sn1,1);
strncat(s2,sn2,1);
}
else
//copy only i-th character to s2
strncat(s2,s,1);
}
puts(s2);
}
printf("\n Length of new string = %d",strlen(s2));
printf("\n New string ="); puts(s2);
getch();
}