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. Варианты индивидуальных задач
Во всех задачах, где не приводится конкретный вид текстовых данных
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.