Лабораторная работа №3 Вариант №6
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №3
по дисциплине
«Программирование на ЯВУ»
на тему:
«Работа со строками»
|
Студент |
|
|
|
|
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
Асс. |
|
|
|
Фарафонов А.С. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
Задание
6 |
Даны строки S1 и S2. Эти строки должны содержать по несколько слов. Сформировать строку S таким образом, чтобы в нее с начала вошли все четные слова строки S1, а потом все нечетные слова строки S2. Сформировать строку S двумя способами: - с использованием функций библиотеки string.h - работая со строками как с массивами.
|
-
Краткие теоретические сведения
Одномерный массив наиболее часто применяется в виде строки символов. Строка — это одномерный массив символов, заканчивающийся нулевым символом. В языке С признаком окончания строки (нулевым символом) служит символ '\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. С помощью функций библиотеки <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;
}
-
Контрольный пример
-
Выводы о проделанной работе
Даны строки S1 и S2. Эти строки содержат по несколько слов. Я сформировал строку S таким образом, чтобы в нее с начала вошли все четные слова строки S1, а потом все нечетные слова строки S2. И сформировать строку S двумя способами:
- с использованием функций библиотеки string.h
- работая со строками как с массивами.
-
Список использованной литературы
-
Шилдт Г. Искусство программирования на C++. БХВ.2005
-
Шилдт Г. C++ Руководство для начинающих. Вильямс.2005
-
Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004