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

Лабораторная работа №3 Вариант №6

.doc
Скачиваний:
9
Добавлен:
20.06.2014
Размер:
95.23 Кб
Скачать

2

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

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

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

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

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

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

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

«Программирование на ЯВУ»

на тему:

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

Студент

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

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

Группа

Принял

Асс.

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

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

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

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

Липецк 2010

  1. Задание

6

Даны строки S1 и S2. Эти строки должны содержать по несколько слов. Сформировать строку S таким образом, чтобы в нее с начала вошли все четные слова строки S1, а потом все нечетные слова строки S2. Сформировать строку S двумя способами:

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

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

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

Одномерный массив наиболее часто применяется в виде строки символов. Строка — это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\0'. Таким образом, строка содержит символы, составляющие строку, а также нулевой символ. Это единственный вид строки, определенный в С.

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

char str[11];

Последний, 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>

#include <stdio.h>

#include <string.h>

#include <conio.h>

int main()

{

int i=0, k=0, len1=0, len2=0, probel[50];

char s1[50], s2[50], s[100], *n, stmp[50];

printf("Enter S1:\n");

gets_s(s1);

printf("\nEnter S2:\n");

gets_s(s2);

len1 = strlen(s1);

len2 = strlen(s2);

strcpy_s(stmp, s1);

for(i=0;i<50;i++)

probel[i]=0;

n = strchr(stmp,' ');

while(n!=0)

{

probel[k] = (int)(n - stmp + 1);

strcpy_s(stmp,n+1);

k++;

n = strchr(stmp,' ');

}

if(k!=0)

for(i=1;i<k;i++)

probel[i] += probel[i-1];

i=0;

while((probel[i]!=0)&&(probel[i+1]!=0))

{

if(i==0)

{

strncpy_s(s, s1 + probel[i], probel[i+1] - probel[i]);

}

else

{

strncpy_s(stmp, s1 + probel[i], probel[i+1] - probel[i]);

strcat_s(s, stmp);

}

i+=2;

}

if(probel[i]!=0)

if(i==0)

{

strncpy_s(s, s1 + probel[i], 100);

}

else

{

strncpy_s(stmp, s1 + probel[i], 100);

strcat_s(s, stmp);

}

if(!((probel[k-1]==strlen(s1))||(k%2==0)))

strcat_s(s," ");

strcpy_s(stmp, s2);

for(i=0;i<50;i++)

probel[i]=0;

k=0;

n = strchr(stmp,' ');

while(n!=0)

{

probel[k] = (int)(n - stmp + 1);

strcpy_s(stmp,n+1);

k++;

n = strchr(stmp,' ');

}

if(k!=0)

for(i=1;i<k;i++)

probel[i] += probel[i-1];

i=0;

if(probel[i]==0)

{

strncpy_s(stmp, s2, 100);

strcat_s(s, stmp);

}

else

{

strncpy_s(stmp, s2, probel[i]);

strcat_s(s, stmp);

i=1;

while(probel[i]!=0)

{

if(probel[i+1]!=0)

{

strncpy_s(stmp, s2 + probel[i], probel[i+1] - probel[i]);

strcat_s(s, stmp);

}

else

{

strncpy_s(stmp, s2 + probel[i], 100);

strcat_s(s, stmp);

}

i+=2;

}

}

printf("\nResult S:\n%s",s);

_getch();

return 0;

}

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

#include <stdio.h>

#include <conio.h>

int main()

{

int i=0, k=0, len1=0, len2=0;

char s1[50], s2[50], s[100];

printf("Enter S1:\n");

gets_s(s1);

printf("\nEnter S2:\n");

gets_s(s2);

while(s1[len1])

len1++;

while(s2[len2])

len2++;

for(i=len1; i<50;i++)

s1[i]=0;

for(i=len2; i<50;i++)

s2[i]=0;

i=0;

while(s1[i]!=0)

{

while((s1[i]!=' ')&&(s1[i]!=0))

{

i++;

}

i++;

while((s1[i]!=' ')&&(s1[i]!=0))

{

s[k] = s1[i];

k++;

i++;

}

i++;

s[k] = ' ';

k++;

}

i=0;

while(s2[i]!=0)

{

while((s2[i]!=' ')&&(s2[i]!=0))

{

s[k] = s2[i];

k++;

i++;

}

i++;

while((s2[i]!=' ')&&(s2[i]!=0))

{

i++;

}

i++;

s[k] = ' ';

k++;

}

printf("\nResult S:\n");

for(i=0; i<k;i++)

printf("%c", s[i]);

_getch();

return 0;

}

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

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

Даны строки S1 и S2. Эти строки содержат по несколько слов. Я сформировал строку S таким образом, чтобы в нее с начала вошли все четные слова строки S1, а потом все нечетные слова строки S2. И сформировать строку S двумя способами:

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

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

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

  1. Шилдт Г. Искусство программирования на C++. БХВ.2005

  2. Шилдт Г. C++ Руководство для начинающих. Вильямс.2005

  3. Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004