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

Функции, работающие с текстами.

Анализ символов – библиотека <ctype.h>

  1. Функции проверки отдельных символов

Данная группа функций выполняет различные проверки, то есть ставит вопросы, например «Является ли символ буквой?» Результатом является ответ «да» (ненулевое значение) или «нет» (нулевое значение):

int isalpha (int ch) - буква

int islower (int ch) - буква нижнего регистра

int isdigit (int ch) - цифра

int isxdigit (int ch) - шестнадцатиричная цифра

int iscntrl (int ch) - управляющий символ (например, \n.\t и т.п.)

int isspace (int ch) - пробельные символы

  1. Функции ввода-вывода на консоль

- ВВОД-ВЫВОД СИМВОЛОВ

Библиотека <stdio.h> - Работа с буферизацией

int getchar (void) // ввод символа с клавиатуры

int putchar (inc ch) // вывод символа на терминал

Библиотека <conio.h> - работа без буферизации (символ немедленно доступен ожидающей программе)

int getch (void) // ввод символа с клавиатуры

int getche (void) - “ -

int putch (int ch) // вывод символана терминал

- ВВОД-ВЫВОД СТРОК

char* gets ( char *str) - ввод строки с клавиатуры

int puts (const char *str) - вывод строки на терминал

Пример 4: Провести проверку строки символов, введенной с клавиатуры

#include "stdafx.h"

#include <iostream>

#include <clocale>

using namespace std;

int main(int argc, char* argv[])

char q[80];

int k=0, k1=0, k2=0,i;

cout<<"\nstr->";

gets(q); // ввод строки с клавиатуры

for (i=0; q[i]!=0; i++)

{ if (isdigit(q[i])) k++;

if (isspace(q[i])) k1++;

if (isupper(q[i])) k2++;

}

cout<<"i="<<i<<endl;

cout<<"количество цифр="<<k<<endl;

cout<<"количество пробелов="<<k1<<endl;

cout<<"количество заглавных букв="<<k2<<endl;

system ("pause");

return 0;

}

  1. Перевод букв из верхнего регистра в нижний и наоборот.

int tolower(int c) нижний регистр

int toupper(int c) верхний регистр

Функции возвращают преобразованную букву.

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

Функция toupper() преобразует свой аргумент к верхнему регистру.

char str[] = "Small text",*p;

for (p=str; *p !=0; p++)

printf ("%c",toupper(*p));

  1. Работа со строками - <string.h>

Различают две группы функций:

  • Функции, начинающимися с str, работают с С-строками (\0 - конец строки).

  • Функции, начинающиеся с mem, работают с массивами символов, позволяя работать и с нулевыми байтами.

Общее правило:

функции, модифицирующие один из аргументов (напр.: копирование, слияние) всегда изменяют первый аргумент.

Функции группы str С-строки (\0 - конец строки).

char *strcpy(char *s1, char *s2)

копирует строку s2 в s1. Возвращает s1.

char *strcat(char *s1, char *s2)

объединяет строки s1 и s2 (дописывает s2 в s1). Возвращает s1.

int strcmp(char *s1, char *s2)

сравнивает строки. Возвращает 0 для совпадающих строк, отрицательное значение при s1<s2 и положительное при s1>s2.

int strlen(char *s1)

Возвращает длину строки s1

char *strchr(char *s1, char sim)

Возвращает указатель на первое вхождение символа sim в строку s1

char *strstr(char *s1, char *s2)

Возвращает указатель на первое вхождение строки s2 в строку s1

Аналогичные функции с контролем длины строки:

char *strncpy(char *s1, char *s2, size_t n)

копирует строку s2 в s1, но копируется не более n символов. Возвращает s1.

char *strncat(char *s1, char *s2, size_t n)

int strncmp(char *s1, char *s2, size_t n)

char *strerror(size_t n)

возвращает строку сообщения, соответсвующего ошибке с номером n.

  • Функции группы mem аргументы -массивы символов, позволяют работать и с нулевыми байтами.

void *memcpy(void *dst, void *src, size_t len)

копирует len байтов (включая нулевые) из src в dst. Возвращает dst.

void *memove(void *dst, void *src, size_t len)

делает то же, что и memcpy. Это - единственная функция, которая правильно копирует перекрывающиеся объекты.

int memcmp(void *s1, void *s2, size_t len)

аналог strcmp, но с учетом нулевых байтов.

void *memset(void *s, int c, size_t len)

заполняет первые len байтов массива s символом c.

Пример 6: Выполнить различные действия с двумя строками, введенными с клавиатуры.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{char s1[80], s2[80];

int k=0,k1=0,k2=0,i;

// ввод строк с клавиатуры

cout<<"\nstr1->"; gets(s1);

cout<<"\nstr2->"; gets(s2);

// определение длины строк

cout<< "Длина строки 1: "<< strlen(s1)<<endl;

cout<< "Длина строки 2: "<< strlen(s2)<<endl;

// сравнение строк

if (!strcmp(s1,s2)) cout<<"Строки равны"<<endl;

else {cout<<"Строки не равны: ";

if (strcmp(s1,s2)>0) cout<<"cтрока1 больше строки2"<<endl;

else cout<<"cтрока2 больше строки1"<<endl;

}

// объединение строк

strcat(s1,s2);

cout<<s1<<endl;

// поиск эталона-символа в строке

if (strchr(s1,'!')) cout<<"! есть в "<<s1<<endl;

cout<<"символ р строит на "<<(strchr(s1,'р')-s1+1)<<" месте"<<endl;

// поиск эталона-строки в строке

if (strstr(s1,"ро")) cout<<"ро есть в "<<s1<<endl;

// копирование

strncpy (s1, s2, 3); // копируем 3 символа из s2 в s1

strcpy (s2,"Копирование!");

cout<<"s1: "<<s1<<endl;

cout<<"s2: "<<s2<<endl;

return 0;

}

Пример 7: Ввести с клавиатуры несколько строк, запомнить их в массиве.

#include "stdafx.h"

#include <iostream>

#include <clocale>

#include <string.h>

using namespace std;

int main(int argc, char* argv[])

{char text[1000], q[80], *p;

int i, len=0, comlen=0, k;

// ВВОД ТЕКСТА В МАССИВ text С КЛАВИАТУРЫ :

// устанавливаем указатель p на начало массива text

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

// после записи очередной строки перемещаем указатель (+ длина строки)

for (p=text, k=0; strlen(q)!=0; p=p+len+1,k++)

{ gets(q); // ввод строки с клавиатуры

strcpy(p,q); // копирование в text

len= strlen(q); // определение длины строки

comlen +=len+1; // общая длина текста

}

cout<<"k="<<k<<endl;

cout<<"comlen="<<comlen<<endl;

// посимвольная работа с текстом

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

cout<<text[i];

cout<<endl;

// построчная работа с текстом

for (i=0, p=text; i<k; i++)

{ strcpy(q,p);

puts(q);

p=p+strlen(q)+1;

}

return 0;

}

Массивы:

text[1000] – для хранения текста в памяти

q[80] – для одной строки текста (при вводе и выводе)

Переменные:

comlen – общее количество введенных символов (включая символы «конец

строки»)

len – длина строки

k – количество строк

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]