Контрольные вопросы для подготовки и самостоятельной работы. < 0 если s1 меньше чем s2




 

 

Индивидуальное задание к лабораторной работе №11.

Составить программу для обработки символьных данных согласно индивидуальному заданию приведенному в таблице 11.1.

Таблица 11.1

Вариант Задание
  Ввести с клавиатуры предложение (слова отделенные пробелом). Пометить местами первое и последнее слова.
  Ввести с клавиатуры предложение. Поменять местами четные и нечетные, по порядку слова.
  Ввести с клавиатуры предложение. Произвести перестановку слов в предложении в обратном порядке.
  Ввести с клавиатуры предложение. Произвести перестановку букв в словах в обратном порядке.
  Ввести два предложения. Добавить второе предложение к первому, отделив их пробелом.
  Ввести с клавиатуры предложение. Произвести вставку слова «не» перед каждым третьим словом в предложении.
  Ввести с клавиатуры предложение. Произвести вставку запятой после слов заканчивающихся на «й». Вывести на экран количество таких вставок.
  Ввести с клавиатуры предложение. Произвести вставку запятой перед словами начинающихся с букв «по».
  Ввести с клавиатуры предложение. Слова заканчивающиеся на «ие» удалить.
  Ввести с клавиатуры предложение. В словах заканчивающихся на «е» заменить эту букву на «я».
  Ввести с клавиатуры предложение и слово. Произвести вставку слова между словами предложениями.
  Ввести с клавиатуры предложение. Поменять местами второе и последнее слово.
  Ввести с клавиатуры предложение. Произвести преобразование нижнего регистра в верхний.
  Ввести с клавиатуры предложение. Произвести преобразование из верхнего в нижний.
  Вывести строку с буквами верхнего и нижнего регистра. Произвести инвертирования регистра.
  Ввести с клавиатуры предложение. Произвести перестановку букв в строке согласно таблице.
  Ввести с клавиатуры предложение. Отсортировать слова в предложении в алфавитном порядке.
  Ввести с клавиатуры предложение. Отсортировать слова в предложении по возрастанию.
  Ввести с клавиатуры предложение. Подсчитать количество гласных букв в каждом слове предложения.
  Ввести с клавиатуры предложение. Подсчитать количество согласных букв в каждом втором слове предложения.
  Ввести с клавиатуры предложение. Отсортировать буквы в каждом слове предложения в порядке убывания: букву «а» считая последней, букву «я» считая первой.
  Ввести с клавиатуры предложение. Подсчитать длину каждого слова в предложении. Найти номер самого длинного и самого короткого слова.
  Ввести с клавиатуры предложение. Найти самое длинное и самое короткие слова и поменять их местами.
  Ввести с клавиатуры предложение. Сформировать массив из длин слов в предложении.
  Ввести с клавиатуры предложение. Найти среднюю длину слов в предложении. Вывести на экран самое длинное слово, и самое короткое слово, самое «среднее» слово.
  Ввести с клавиатуры предложение. Произвести упаковку и распаковку предложений (повторяющиеся комбинации символов заменить каким-либо одним символом).
  Вывести два предложения. Соединить предложения и отсортировать слова в порядке обратном алфавитному.
  Ввести с клавиатуры предложение. Разбить предложение на два.

 

Контрольные вопросы для подготовки и самостоятельной работы

1 Укажите способы объявления символьных строк (переменных и констант).

2 Какой символ ставится в конце строки?

3 Сколько памяти занимает один символ строки?

4 Сколько памяти занимает строка (слово) из 6 букв?

5 Можно ли использовать указатели для адресации символьных строк, содержащихся в массивах?

6 Сколько указателей можно использовать для работы с массивами?

7 Какой объект адресуется указателем, смещенным относительно начала строки на n байтов?

8 Какая функция позволяет определить длину строки?

9 Какие операции применимы к указателям и необходимы для работы со строками?

10 Можно ли инициализировать массивы с данными типа char строками символов?

11 Можно ли инициализировать указатели на тип char строками символов?

12 Какие символьные последовательности называют управляющими, что они означают?

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

Использование библиотечных функций для работы с символьными данными

(2 часа)

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

Теоретические сведения

Функции для работы с символьными данными

 

Для работы с символьными данными разработан ряд библиотечных функций. Рассмотрим некоторые из них:

char *strcat(char *dest, const char *src); - добавляет копию строки src в конец dest. Длина результирующей строки равна strlen(dest) + strlen(src).

strcat() - возвращает указатель на результирующую строку.

Функция char *strchr(const char *s, int c); - просматривает строку в прямом направлении для отыскания в ней заданного символа. Функция strchr() ищет первое вхождение символа с в строку s. Символ конца строки считается частью строки, поэтому - strchr(strs, 0) вернет значение указателя на нулевой конечный символ строки strs. Функция strchr() возвращает указатель на первое вхождение символа с в s, если c не обнаружен в s, то strchr() возвращает нуль.

int strcmp(const char *s1, const char *s2); - осуществляет беззнаковое сравнение строк s1 и s2, начиная с первого символа каждой строки, до тех пор, пока очередные соответствующие символы в строках не будут различны или пока не будут достигнуты концы строк. Функция strcmp () возвращает значение:

< 0 если s1 меньше чем s2;

= = 0 если s1 равна s2;

> 0 если s1 больше чем s2.

int strcmpi(const char *s1, const char *s2); - сравнивает одну строку с другой аналогично s trcmp(), но без различия больших и маленьких букв. Функция strcmpi() определена как макрос в string.h и преобразует вызовы strcmpi() к вызовам strcmp(). Макрос обеспечивает совместимость с другими компиляторами С.

int strncmp(const char *s1, const char *s2, size_t maxlen); - сравнивает часть одной строки с частью другой. Функция strncmp() производит такое же беззнаковое сравнение, как и strcmp(), но просматривает не более, чем maxlen символов. Она начинает с первого символа каждой строки и заканчивает, когда очередные символы в строках различны или когда проверено maxlen символов. Функция strncmp () возвращает значение типа int, смысл которого аналогичен strncmp().

char *strcpy(char *dest, const char *src); - копирует строку src в dest, завершая работу после копирования символа окончания строки. Функция strcpy() возвращаетуказатель на результирующую строку (dest).

size_t strcspn(const char *s1, const char *s2); - ищет в строке первый сегмент, не содержащий ни одного символа из заданного набора символов. Функция strcspn() возвращает длину первого встретившегося сегмента строки s1, состоящего только из символов, не входящих в строку s2.

size_t strlen(const char *s); - вычисляет длину строки s. Функция strlen() - возвращает число символов в s, не считая символ конца строки.

char *strlwr(char *s); - преобразует буквы верхнего регистра (А-Z) строки s в буквы нижнего регистра (a-z). Другие символы не изменяются. Функция strlwr() возвращает указатель на строку s.

char *strnset(char *s, int ch, size_t n); - заменяет заданное количество символов n в строке s на указанный символ ch. Функция strnset() копирует символ ch в первые n байтов строки s. Если n > strlen(s), тогда strnset() заменяет,всесимволы и останавливается, когда достигнут конец строки (обнаружен нулевой символ).

Функция strnset() - возвращает указатель на изменённую строку s.

char *strpbrk(const char *s1, const char *s2); ищет в строке первое вхождение любого символа из переданного функции набора символов. Функция strpbrk() - осуществляет поиск в строке s1 первого вхождения любого из символов, определяемых строкой s2. Функция strpbrk() - возвращает указатель на первое вхождение любого символа строки s2. Если ни один символ из символов s2 не обнаружен в s1, то функция возвращает нуль.

char *strrchr(const char *s, int ch); - ищет в строке последнее вхождение заданного символа. Функция strrchr() проверяет строку s в обратном направлении, производя поиск заданного символа. Функция strrchr() находит последнее вхождение символа ch в строку s. Предполагается, что символ окончания строки является частью строки. Функция strrchr() возвращает указатель на последнее вхождение символа ch. Если ch не обнаружен в s, то strrchr() возвращает нуль.

char *strrev(char *s); - переворачивает строку. Функция strrev(), переустанавливает все символы в строке в обратном порядке, за исключением завершающего нулевого символа. Например, "строка\0" будет преобразована в "акортс\0". Функция strrev() возвращает указатель на перевернутую строку.

char *strset(char *s, int ch); - заменяет все символы строки s на заданный символ ch, заканчивая работу при обнаружении символа конца строки. Функция strset() - возвращает указатель s на результирующую строку.

char *strstr(const char *s1, const char *s2); - осуществляет поиск в строке s2 первого вхождения в нее подстроки s1. Функция strstr() - возвращает указатель на элемент в строке s2, с которого начинается s1 (указатель на s1 в s2). Если s1 не обнаружена в s2, то strstr() возвращает нуль.

Пример

/* ЗАНЯТИЕ N 12

Разработал Петров Ю.В.

Использование библиотечных функций для обработки символьных данных.

Выпполнить сортировку элементов массива list[N][4], использовать

функции strcpy(), qsort(), strcmp(), stricmp(). Разработать функцию

сравнения строк с учетом и без учета регистра -sort_function(). */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#define N 8

int sort_function(const void *a, const void *b);

char list[N][4]={"1a3","d34","1c4","235","2h5","012","135","102"};

//list[N][4]-глобальный массив

int registr=1; //Глобальная переменная для управления режимом

//работы функции sort_function(): 0 -с учетом регистра, 1-без

int main(void)

{ clrscr();

int i,j;

char *pch=NULL;

printf("\n\tИсходный (глобальный) массив char list[N][4]:\n");

for (i=0; i<N; i++) printf("%s ", list[i]);

printf("\n");

for (i=0; i<N; i++) //Cортировка массива

for (int j1=i+1;j1<N;j1++)

{j=sort_function((void *)list[i], (void *)list[j1]);

if(j>0) //Замена строк: char *strcpy(char *dest,

{ strcpy(pch,list[i]); // const char *src);

strcpy(list[i],list[j1]);

strcpy(list[j1],pch);

}

}

printf("\n\tРезультат сортировки:\n");

for (i=0; i<N; i++) printf("%s ", list[i]);

printf("\n");

printf("\n\tИсходный (локальный) массив char list[N][4]:\n");

char list[N][4]={"abc","cad","tre","Cab","abb","Abc","cam","Cap"};

for (i=0; i<N; i++) printf("%s ",list[i]);

printf("\n");

qsort((void *)list, N, sizeof(list[0]), sort_function);

//Функция использует для сортировки алгоритм quicksort

// void qsort(void *base, size_t nelem, size_t width,

//int (*fcmp)(const void *, const void *));

printf("\n\tРезультат сортировки без учета регистра:\n");

registr=1;

for (i=0; i<N; i++) printf("%s ",list[i]);

printf("\n");

registr=0;

qsort((void *)list, N, sizeof(list[0]), sort_function);

printf("\n\tРезультат сортировки c учетом регистра:\n");

for (i=0; i<N; i++) printf("%s ",list[i]);

printf("\n");

// Функции strrev() strcat()

char *s = "Герой ";

char *m = "- Gerakl";

char *t = "retro";

char *sapr = "cae";

printf("\t Исходная строка: %s \n", t);

char *g = strrev(t);

printf("\t Перевернутая строка: %s \n", g);

s = strcat(s,m);//char *strcat(char *dest, const char *src);

printf("\t Конкатенация строк: %s\n",s);

getch();

return 0;

}

 

int sort_function(const void *a, const void *b)

{ if (registr==0) //C учетом регистра

return(strcmp((const char *)a,(const char *)b));

//int strcmp(const char *s1, const char*s2); Возвращает:

// (<0) если s1<s; (==0) если s1==s2; (>0) если s1>s2

else //Без учета регистра

return(stricmp((const char *)a,(const char *)b));

 

}

/* Исходный (глобальный) массив char list[N][4]:

1a3 d34 1c4 235 2h5 012 135 102

 

Результат сортировки:

012 102 135 1a3 1c4 235 2h5 d34

 

Исходный (локальный) массив char list[N][4]:

abc cad tre Cab abb Abc Cap cam

 

Результат сортировки без учета регистра:

abb Abc abc Cab cad cam Cap tre

 

Результат сортировки c учетом регистра:

Abc Cab Cap abb abc cad cam tre

 

Исходная строка: retro

Перевернутая строка: orter

Конкатенация строк: Герой - Gerakl */

Ход работы

1 Изучить теоретические сведения

2 В соответствии с индивидуальным заданием разработать алгоритм решения задачи. На базе лабораторной работы №11 реализовать задание, при этом использовать библиотечные функции, рассмотренные на лекции и в теоретической части лабораторной работы. Результаты обработки строк (выделенные элементы) представить в массиве указателей. Обеспечить возможность передачи данных из окружения (из командной строки). При работе со строками использовать функции поиска одиночных символов и последовательностей в заданной строке.

3 Разработать программу.

4 Набрать программу на компьютере, отладить её и изучить работу операторов.

5 Получить результаты.

6 Оформить отчет.

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: