Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №11.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
309.76 Кб
Скачать

Пример 27

// Ввести строку, используя указатели и удалить из нее все вхождения символа а.

# include <stdio.h>

# include <conio.h>

# include <stdlib.h>

# include <locale.h>

# include <string.h>

int main(void)

{

//устанавливаем русско язычный вариант вывода информации на экран

setlocale(LC_ALL,"Russian");

//описываем указатель на символьный тип данных

//и сразу же выделяем область памяти размером 50 байт (предполагаемая

//длина строки

char *ptr=(char*)malloc(50*sizeof(char));

//Проверка выделения динамической области памяти

if (!ptr) {printf("Память не выделена"); return 1;}

char *ptr1;

printf("Введите строку: ");

gets(ptr);

//переопределяем динамическую область памяти под истинный размер

//введенной строки, т.к. функция strlen() определяет количество

//видимых симолов, а необходимо учесть и символ конца строки ‘\0’,

// strlen(ptr)+1

ptr=(char*)realloc(ptr,(strlen(ptr)+1)*sizeof(char));

if (!ptr) {printf("Память не выделена"); return 1;}

while(ptr1=strchr(ptr,'a'))

strcpy(ptr1,ptr1+1);

//Переопределяем новый размер строки

ptr=(char*)realloc(ptr,strlen(ptr)*sizeof(char)+1);

printf(" Новая строка ->%s",ptr);

//освобождаем динамическую память

free(ptr);

_getch();

return 0;

}

Пояснения к программе.

while(ptr1=strchr(ptr,'a'))

strcpy(ptr1,ptr1+1);

ptr=(char*)realloc(ptr,strlen(ptr)*sizeof(char)+1);

В данном цикле проверяем вхождения симола а в строке используя функцию strchr(). Если данный символ в строке ptr существует, то переменная ptr1 получит адрес первого вхождения данного символа в строке ptr. Если такого символа в строке нет, то переменная ptr1 получит значение адресного нуля, т.е. NULL и цикл прекратит свою работу. Используя strcpy(ptr1,ptr1+1), копируем последовательность байтов начиная с адреса ptr1+1 и заканчивая ‘\0’ в строку, начинающуюся с адреса ptr1. Таким образом, удаляем все вхождения символа а.

Результат выполнения программы:

Рис. 11. 2 Результат выполнения программы к примеру 27

Ключевые термины

Внутренние коды символов – целые числа, однозначно соответствующие символам во внутреннем представлении.

Инициализация строки – определение значения строки.

Размер строки – объем памяти, занимаемой строкой, выраженный в байтах.

Символ конца строки – нулевой байт, являющийся признаком конца строки символов.

Символьная константа – константа типа char.

Символьная переменная – переменная типа char.

Строка – это пронумерованная последовательность символов, заключенная в двойные кавычки.

Конкатенация строк – это результат последовательного соединения строк.

Лексикографический порядок – правило сравнения символов, основанное на величине кода внутреннего представления каждого символа.

Пустая строка – это строка единичной длины, содержащая только символ конца строки.

Сравнение строк – это результат проверки выполнения отношения "больше", "меньше" или "равно" над строками.

Стандартные функции по работе со строками – это функции обработки строк, прототипы которых входят в стандартные библиотеки С

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

Строки как параметры функций – это описание передачи значений строк в функции как массив символов или указатель типа char.

Указатель на строку – адрес начала расположения строки в памяти.