Решение задач с использованием данных символьного типа. Основные функции обработки символьных типов

Страницы работы

Фрагмент текста работы

char *strupr (char *st); – преобразует символы строки st нижнего регистра в символы верхнего регистра, другие символы не затрагиваются.

char *strrev (char *st); – записывает символы в строке st в обратном порядке (реверсирует строку).

char *strchr (char *st, int c); – определяет первое вхождение символа c в строку st; возвращает указатель на символ в строке st, который соответствует введенному образцу.

char *strchr (char *st, int c); – находит последнее вхождение символа c в строку st; eсли символ c в строке не обнаружен – возвращает 0, иначе возвращает указатель на последний символ в строке st, который соответствует заданному образцу.

Поиск подстроки в строке

strspn (const char *st1, const char *st2 ); – возвращает количество символов от начала строки st1, совпадающих с символами строки st2, где бы они не находились в st2.

char *strstr (const char *st1,const char *st2); – функция ищет в строке st1 первое вхождение st2 и возвращает указатель на первый символ, найденный в st1 из подстроки st2; если строка st2 не обнаружена в st1 – функция возвращает 0.

В случае необходимости определения последнего вхождения, надо вначале реверсировать строку с помощью функции  strrew.

char *strtok (char *st, const char *dlm); – разбивка строки на лексемы (сегменты), ограниченные символами включенными в состав параметра dlm. Этот параметр может содержать любое количество разных ограничителей – признаков границ лексем; после выделения лексемы в строку st помещается символ '\0'.

Последующие вызовы функции strtok() должны быть с первым аргументом NULL. Они будут возвращать указатель на другие, имеющиеся в st лексемы. Каждый раз после завершения выделения лексем в ее конце вместо разделительного символа помещается символ '\0'. После того, как в строке не останется ни одной лексемы, функция возвращает NULL. Для сохранения исходной строки ее надо записать в резервную переменную. Эту функцию удобно использовать для разбивки предложения на слова или любые другие сегменты.

tolower (s) ¾ преобразует символ s к нижнему регистру;

toupper (s) ¾ преобразует символ s к верхнему регистру;

3.1.2 Тип строк AnsiString

В C++ Builder тип строк AnsiString реализован как класс, объявленный в файле vcl/dstring.h. Это строки с нулевым символом в конце. При объявлении переменных типа AnsiString инициализируются пустыми строками.

Для AnsiString определены операции отношения. ==, !=, >, <, >=, >=. Сравнение производится с учетом регистра.

Для AnsiString определены операции присваивания =, += и операция склеивания строк (конкатенации) +. Определена также операции индексация []. Индексы начинаются с 1. Например, если S1 = "Привет", то S1[1] вернет "П" и т.д.

Тип AnsiString используется для ряда свойств компонентов C++ Builder. Например, для таких, как свойства Text окон редактирования, свойства Caption меток и разделов меню и т.д. Этот же тип используется для отображение отдельных строк в списках строк типа TStrings. Таким образом, постоянно имея дело с этими свойствами, вы постоянно работаете с AnsiString.

Рассмотрим некоторые примеры работы с AnsiString. Следующий оператор демонстрирует конкатенацию (склеивание) двух строк:

Label1->Caption = Edit1->Text + ' ' + Edit2->Text;

Преобразование строки AnsiString в строку (char *) осуществляется функцией c_str() без параметров, возвращающей строку с нулевым символом в конце, содержащую текст той строки AnsiString, к которой она применена.

Возможно и обратное преобразование строки (char *) в строку AnsiString. Для этого этого используется функция AnsiString (char *S); которая возвращает строку типа AnsiString, содержащую текст, записанной в строке S, являющейся аргументом функции.

3.2. Пример программы

Задание: Реализовать программу, которая подсчитывает количество слов в предложении. Реализовать интерфейс программы: меню, просмотр исходного теста и результат обработки программы.

Рис. 3.1 Интерфейс программы

Код программы:

#include <vcl.h>

#include <string.h>

#include <stdio.h>

#pragma hdrstop

#include "Unit1.h"

//--------------------------------------------------------------------------#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)

{

char *tk, *s =" ";

char s1[25];

if (strlen(Edit1->Text.c_str())==0) // проверка на пустую строку

{

ShowMessage("Отсутствуют исходные данные !!!");

Edit2->Text = ""; // очистка поля

}

else

{

int i = 0; // счетчик количества слов в строке

strcpy(s1,Edit1->Text.c_str()); // Функция  c_str() преобразует тип AnsiString в char

tk = strtok (s1, s);

while (tk != NULL)

{

tk = strtok (NULL,s);

i++;

}

Edit2->Text = "Количество слов в строке " + IntToStr(i); // вывод результата на экран

}

}

3.3. Варианты индивидуальных задач

Во всех задачах, где не приводится конкретный вид текстовых данных

Похожие материалы

Информация о работе