Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
oop12.doc
Скачиваний:
17
Добавлен:
06.02.2016
Размер:
1.13 Mб
Скачать

Лабораторная работа №4 “Обработка строк”

Цель. Освоение основ технологии объектно-ориентированного программирования на примере создания класса «строка».

1. Общие указания

В С++ поддерживаются два типа строк – встроенный тип, доставшийся от С (С-строки у Страуструпа [11] или строковый литерал), и класс srting из стандартной библиотеки С++. В этой лабораторной Вы будете работать со строковым литералом.

Строка – это массив символов. Один символ занимает один байт. Строка заканчивается нулевым байтом (символом ‘\0’).

Таким образом, строка определяется тройкой:

  1. Начальный адрес (логическое имя строки символов).

  2. Тип символов

  3. Кол-во элементов данного типа (длина строки).

Память класса имеет вид

[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();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]