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

Алгоритмизация и ОП / 7РАБОТА СО СТРОКАМИ В ЯЗЫКЕ С

.doc
Скачиваний:
15
Добавлен:
09.02.2016
Размер:
67.07 Кб
Скачать

2.7 Лабораторная работа №7. Работа со строками и файлами

Цель работы: изучить базовые операции работы со строками и файлами

Общие сведения

В языке С нет специального типа данных для строковых переменных. Для этих целей используются массивы символов (тип char). Следующий пример демонстрирует использование строк в программе:

char str_1[100] = {‘П’,’р’,’и’,’в’,’е’,’т’,’\0’};

char str_2[100] = “Привет”;

char str_3[] = “Привет”;

printf(“%s\n%s\n%s\n”,str_1,str_2,str_3);

В приведенном примере показаны три способа инициализации строковых переменных. Первый способ является классическим объявлением массива, второй и третий используются специально для строк. Причем в последнем случае, компилятор сам определяет нужную длину массива для записи строки.

Символ ‘\0’ означает в языке С конец строки и все символы после него игнорируются как символы строки.

Функции ввода строк

scantf(“%s”, имя строковой переменной);

gets(имя строковой переменной);

Функции вывода символа

printf(“%s”, имя строковой переменной);

puts(имя строковой переменной);

Для работы со строками можно использовать библиотеку стандартных функций <string.h>, в которой имеются следующие функции работы со строками:

1. Объединение строк или конкатенация

strcat(имя строки1, имя строки2);

2. Замена содержимого одной строки содержимым другой

strcpy(имя строки1, имя строки2);

3. Нахождение числа символов в строке

strlen(имя строки);

4. Сравнение Строки 1 и Строки 2.

strcmp(имя строки1, имя строки2);

Возвращает 0, если строки равны, число меньше нуля, если Строка 1<Строка 2 и число больше нуля, если Строка 1>Строка2.

5. Преобразование строчных символов строки в прописные (обрабатывает только буквы латинского алфавита).

strlwr(имя строки);

6. Преобразование прописных символов строки в строчные (обрабатывает только буквы латинского алфавита).

strupr(имя строки);

7. Заполнение строки указанным при вызове функции символом

strset(имя строки, имя символа);

8. Поиск символа в строке. (Возвращает указатель на первый найденный символ или, если символ не найден – NULL.)

strchr(имя строки, имя символа);

По завершению программы, все данные пропадают. Для сохранения данных используются файлы.

Файл - это единица хранения данных, которые обычно хранятся на винчестерах (жестких дисках). Мы будем рассматривать как последовательный, так и произвольный доступ к файлу. Давайте теперь рассмотрим работу с файлами. Файл - это единица хранения данных, которые обычно хранятся на винчестерах (жестких дисках). В языке Си любой файл рассматривается как поток байтов. Концом любого файла является специальный символ.

При работе с файлами выполняются операции ввода - вывода. Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ через файловый буфер (структура FILE или дескриптор файла ), операция вывода - это пересылка данных из основной памяти через файловый буфер на внешнее устройство (в выходной файл). Файлы на внешних устройствах часто называют физическими файлами.

Доступ к файловому буферу осуществляется через указатель, который содержит адрес файлового буфера

Определение указателя на файл

FILE *fp;

Четыре шага, необходимых для работы с файлами

1.открыть файл;

2. закрыть файл;

3. ввод файла;

4. вывод файла.

Открытие файла

fp=fopen(“имя_физического файла”,”режим”);

Закрытие файла

fclose(имя_указателя);

Режимы работы с файлом

Режим

Назначение

r

открываем файл для чтения (чтение из файла в файловый буфер ОП)

w

создаем файл для записи (запись из файлового буфера ОП в файл) Если файл уже существует, то данные стираются

a

Режим добавления данных (добавление из файлового буфера ОП в файл) Если файл уже существует, то записываем данные в конец файла

r+

существующий текстовый файл открывается как для чтения, так и для записи в любом месте файла; недопустимо увеличение файла

w+

создаем файл для обновления. Если файл уже существует, то данные стираются

a+

создает файл для обновления. Если файл существует, то данные записываются в конец файла

Функции ввода файла (чтение данных из файла)

1.ввод одного символа

имя_переменной=getc(имя_указателя);

2.ввод строки

fgets(pa,n,fp);

где pa- имя_указателя на строковую переменную или имя массива символов, куда читается строка из файла;

n- количество символов, считываемых с файла;

fp-имя_указателя, содержащего адрес файлового буфера

3. чтение данных из файла последовательного доступа

fscanf(fp,”f ”,a);

где f- форматная строка

a- адрес_переменной

Пример: fscanf(fp,”%d”,&a);

4. чтение данных из файла произвольного доступа.

fread(a,m,n,fp);

где m-размер блока данных;

n-количество блоков данных;

Пример: fread(&a,sizeof(int),10,fp);

Функции вывода файла (запись данных в файл)

1.вывод одного символа (запись одного символа)

putc(имя_переменной,имя_указателя);

2.вывод строки(запись строки в файл)

fputs(pa,fp);

где pa- имя_указателя на строковую переменную или имя массива символов, откуда читается строка в файл;

fp-имя_указателя, содержащего адрес файлового буфера

3. записи данных в файл последовательного доступа

fprintf(fp,”f ”,a);

где f- форматная строка

a- имя_переменной

Пример: fprintf(fp,”%d”, a);

4.запись данных в файл произвольного доступа. fwrite(a,m,n,fp);

где m-размер блока данных;

n-количество блоков данных;

Пример: fwrite(a,sizeof(int),10,fp);

Задание А

Пример. Написать программу замены во веденной строке буквы «а» на символ «+»

#include<stdio.h>

#include<string.h>

int main()

{ int i;

char st[10];

gets(st);

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

if (st[i]=='a')st[i]='+';

printf("\n st=%s\n",st);// puts(st);

system("PAUSE");

return 0;

Варианты задания А

1 Написать программу поэлементного копирования строки «Языки и технология программирования» в другой символьный массив

2. Написать программу объединения трех строк “Лабораторная ”, “ работа ” и

“№6” в четвертую строку с текстом: «Лабораторная работа “№6”»

3 Написать программу замены во веденной строке малых букв а на заглавные

4. Написать программу удаления букв «н» из введенной строки

5 Написать программу подсчета букв «е» во введенной строке

6 Написать программу добавления слова «салют» после первого слова введенной строки

7 Написать программу удаления букв «о» из введенной строки

8 Написать программу сцепления двух строк

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

10 Написать программу замены во веденной строке заглавных букв «О» на малые

11 Написать программу подсчета числа слов в строке

12 Написать программу подсчета букв ‘и’ во введенной строке

13 Написать программу замены первого слова из введенной строки на последовательность символов «*»

14 Написать программу удаления всех пробелов из введенной строки

15 Написать программу замены последнего слова из введенной строки на последовательность символов «*»

16 Написать программу копирования первой половины введенной строки в другую строку

17 Написать программу вывода введенного слова задом на перед.

18 Написать программу замещения первых половин двух введенных строк

19 Написать программу удаления последнего слова из строки

20 Написать программу замещения первой половины строки второй, а второй – первой

Задание Б

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

Пример. Написать программу замены во веденной строке буквы «а» на символ «+»

#include <conio.h>

#include <stdio.h>

int main()

{int i;

char st[10];

FILE *fp; /*объявляем указатель на структуру File*/

fp = fopen("1.txt","w"); /*открытие файла для записи*/

if (fp == NULL)

printf("Файл невозможно открыть или создать\n");

else{

scanf ("%s", st); /*ввод данных*/

fprintf(fp," %s\n", st); /*запись данных из переменной st в файл*/ }

fclose(fp); /*закрытие файла*/

fp = fopen("1.txt","r"); /*открытие файла для чтения*/

if ((fp = fopen("1.txt","r")) == NULL)

printf("Файл невозможно открыть или создать\n"); else{

fscanf(fp," %s", st); /* чтение данных из файла и запись их в переменную st */

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

if (st[i]=='a')st[i]='+';

}fclose(fp);

fp = fopen("1.txt","w"); /*открытие файла для записи*/

if (fp == NULL)

printf("Файл невозможно открыть или создать\n");

else{

fprintf(fp," %s\n", st); /*запись данных из переменной st в файл*/ }

fclose(fp);

fp = fopen("1.txt","r"); /*открытие файла для чтения*/

if ((fp = fopen("1.txt","r")) == NULL)

printf("Файл невозможно открыть или создать\n"); else{

fscanf(fp," %s", st);

printf (" %s\n", st); /*вывод данных*/

}

fclose(fp); /*закрытие файла*/

system("PAUSE");

return 0;

}

Варианты задания Б

Варианты задания соответствуют вариантам задания А настоящей лабораторной работы

Контрольные вопросы

  1. Что такое файл?

  2. Какие существуют виды файлов?

  3. Каково должно быть содержание программы по созданию файла и его корректировки (замена элементов, добавление элементов, удаление элементов)?

  4. Какие существуют режимы работы с файлом?

  5. Шаги, необходимые для работы с файлами?

  6. Как объявляются строковые переменные в языке С?

  7. Способы инициализации строковых переменных.

  8. Что означает символ ‘\0’ в языке С?

52