Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3 (Вариант 24)

.docx
Скачиваний:
12
Добавлен:
20.06.2014
Размер:
112.46 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

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

по дисциплине

«Программирование на языке выс. уровня»

на тему:

«Работа со строками»

Студент

Ключанских А.С

подпись, дата

фамилия, инициалы

Группа

АС-10-1

Принял

Фарафонов А.С.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание кафедры

224

Удалить из строки s все символы, встречающиеся не менее одного раза в строке s1 и не более трех раз в строке s2.

- с использованием функций библиотеки string.h

- работая со строками как с массивами.

  1. Краткие теоретические сведения

Стандартная библиотека языка С обладает богатым и разнообразным набором функций для обработки строк и символов. Строковые функции работают с массивами символов (строками), заканчивающимися символом конца строки. В языке С для работы со строковыми функциями используется заголовок <string.h>. Строка — это одномерный массив символов, заканчивающийся нулевым символом. Таким образом, строка содержит символы, составляющие строку, а также нулевой символ. Это единственный вид строки, определенный в С.

Объявляя массив символов, предназначенный для хранения строки, необходимо предусмотреть место для нуля, т.е. указать его размер в объявлении на один символ больше, чем наибольшее предполагаемое количество символов. Например, объявление массива str, предназначенного для хранения строки из 10 символов, должно выглядеть так:

char str[11];

Записанная в тексте программы строка символов, заключенных в двойные кавычки, является строковой константой, например,

"некоторая строка"

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

strcpy(s1,s2) - копирование s2 в s1

strcat(s1,s2) - конкатенация (присоединение) s2 в конец s1

strlen(s1) - возвращает длину строки s1

strcmp(s1,s2) - возвращает 0, если s1 и s2 совпадают, отрицательное значение, если s1<s2 и положительное значение, если s1>s2

strchr(s1,ch) - возвращает указатель на первое вхождение символа ch в строку s1

strstr(s1,s2) - возвращает указатель на первое вхождение строки s2 в строку s1

  1. Блок-схема программы

  1. С использованием функций библиотеки string.h

  1. Работая со строками как с массивами.

  1. Листинг программы

  1. С использованием библиотеки string.h

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <locale.h>

const int len = 100;

void main()

{

setlocale(LC_ALL, "Russian");

char s1[len],s2[len],s3[len];

gets(s1);gets(s2);gets(s3);

char buffer_s1[256],buffer_s2[256],buffer_s3[256];

memset(buffer_s1,0,256);

memset(buffer_s2,0,256);

memset(buffer_s3,0,256);

int i = 0;

char c;

while(s1[i])

{

c = s1[i];

buffer_s1[c]++;

i++;

}

i=0;

while(s2[i])

{

c = s2[i];

buffer_s2[c]++;

i++;

}

i=0;

char s[len];

int j = 0;

while(s3[i])

{

c = s3[i];

if(buffer_s1[c] > 1 && buffer_s2[c] <= 3 && buffer_s2[c] >= 1)

{

i++;

continue;

}

strcpy(&s[j],&s3[i]);

i++;

j++;

}

s[j]=0;

printf("\nРезультат: %s",s);

getch();

}

  1. Работая со строками, как с массивами.

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <locale.h>

const int len = 100;

void main()

{

setlocale(LC_ALL, "Russian");

char s1[len],s2[len],s3[len];

gets(s1);gets(s2);gets(s3);

char buffer_s1[256],buffer_s2[256],buffer_s3[256];

memset(buffer_s1,0,256);

memset(buffer_s2,0,256);

memset(buffer_s3,0,256);

int i = 0;

char c;

while(s1[i])

{

c = s1[i];

buffer_s1[c]++;

i++;

}

i=0;

while(s2[i])

{

c = s2[i];

buffer_s2[c]++;

i++;

}

i=0;

char s[len];

int j = 0;

while(s3[i])

{

c = s3[i];

if(buffer_s1[c] > 1 && buffer_s2[c] <= 3 && buffer_s2[c] >= 1)

{

i++;

continue;

}

s[j]=s3[i];

i++;

j++;

}

s[j]=0;

printf("\nРезультат: %s",s);

getch();

}

  1. Контрольный пример

Выводы о проделанной работе

В ходе выполнения данной лабораторной работы я написал программу, которая удаляет из данной строки символы, которые встречаются более 1 раза в другой строке, но менее 3 раз в третьей. Я реализовал это двумя способами:

- с использованием функций библиотеки string.h

- работая со строками как с массивами.

Таким образом, я улучшил свои навыки в программировании на языке Си, познакомился с функциями стандартной библиотеки string.h, научился решать практические задачи разными способами с помощью одного и того же языка.

Несмотря на различные способы реализации, данная программа выдает один и тот же результат, если ввести и в первый и во второй ее вариант одинаковые строки.

Список использованной литературы

  1. Керниган, Б.У. Язык программирования C [Текст]: учеб.пособие / Б.У.Керниган, Д.М.Ритчи. — М.: «Вильямс», 2007. — 304 с.

  2. Шилдт, Г. C++ Шаг за шагом [Текст]: учеб.пособие/ Г. Шилдт.— М.: «ЭКОМ», 2007. — 640с.