|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.06.2010, 00:03 | #1 |
Новичок
Джуниор
Регистрация: 15.06.2010
Сообщений: 2
|
Borland C++
Программа поочерёдно выделяет слова в тексте и считает количество слов в тексте. А нужно чтобы она выделяла и считала слова, заканчивающиеся на гласную букву. Не могу понять как это можно реализовать?
|
16.06.2010, 00:04 | #2 |
Новичок
Джуниор
Регистрация: 15.06.2010
Сообщений: 2
|
#include <vcl.h>
#pragma hdrstop #include "project_unit.h" #pragma package(smart_init) #pragma resource "*.dfm" #include <fstream.h> // Библиотека работы с файлами. TForm1 *Form1; int current = 0; // Мнимая текущая позиция курсора. char* text = new char[1000]; // Переменная для хранения прочитанного из файла текста. bool is_ava(char c) // Функция проверки на принадлежание символа слову. { char ava[] = { "abcdefghijklmnopqurstuvwxyzABCDEFG HIJKLMNOPQRSTUVWXYZ0123456789_\'" }; // Массив допустимых символов. for (int i = 0; i < strlen(ava); i++) // Посимвольное чтение массива. if (c == ava[i]) // Возврат TRUE, если символ <c> return true; // равен текущему символу массива. return false; // Иначе - FALSE. } __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ifstream reader("File.dat"); // Инициализация потока чтения. reader.read(text, 1000); // Чтение в переменную <text> 1000 символов. memo->Text = text; // Запись в текстовое поле переменной <text>. int words = -1; // Переменная для отображения количества слов. for (int i = 0; i < strlen(text); i++) // Посимвольное чтение переменной <text> с поизции 0. if (!is_ava(text[i]) && i != 0 && is_ava(text[i - 1])) words++; // Если символ недопустим, он не стоит в начале и он является первым символом недопустимой последовательности, а не её частью, то Кол-во слов + 1. edit->Text = words; // Запись в текстовое поле переменной <words>. } void __fastcall TForm1::nextClick(TObject *Sender) { for (int i = current; i < strlen(text); i++) // Посимвольное чтение переменной <text> с позиции <current>. if (is_ava(text[i])) // Если символ допустим, то: { // memo->SelStart = i; // Определить начало выделения равным индексу этого символа. current = i; // Присвоить переменной <current> значение индекса. break; // Завершить цикл. } // for (int i = current; i < strlen(text); i++) // Посимвольное чтение переменной <text> с позиции <current>. if (!is_ava(text[i])) // Если символ недопустим, то: { // memo->SelLength = i - current; // Определить длину выделения равной индекс символ - <current>, в которой хранится начало выделения. current = i; // Присвоить переменной <current> значение индекса. break; // Завершить цикл. } // memo->SetFocus(); // Подтвердить выделение текстового поля. } void __fastcall TForm1:reviousClick(TObject *Sender) { int sel_end = -1; // Переменная для хранения конца выделения. for (int i = memo->SelStart - 1; i >= 0; i--) // Обратное посимвольное чтение переменной <text> с позиции, предшествующей началу выделения. if (is_ava(text[i])) // Если символ допустим, то: { // sel_end = i; // Присвоить переменной <sel_end> значение индекса. current = i; // Присвоить переменной <current> значение индекса. break; // Завершить цикл. } // for (int i = current; i >= 0; i--) // Обратное посимвольное чтение переменной <text> с позиции <current>. if (!is_ava(text[i])) // Если символ недопустим, то: { // memo->SelStart = i + 1; // Определить начало выделения равным индексу этого символа + 1. memo->SelLength = sel_end - memo->SelStart + 1; // Определить длину выделения равной разнице между концом и началом выделения + 1. current = i; // Присвоить переменной <current> значение индекса. break; // Завершить цикл. } // else if (i == 0) // Если текущий индекс равен 0 (недопустимый символ не может быть найден, так как начало строки), то: { // memo->SelStart = 0; // Определить начало выделения равным 0. memo->SelLength = sel_end - memo->SelStart + 1; // Определить длину выделения равной разнице между концом и началом выделения + 1. current = i; // Присвоить переменной <current> значение индекса. } // Завершить цикл. memo->SetFocus(); // Подтвердить выделение текстового поля. } Последний раз редактировалось ~eXe~; 16.06.2010 в 00:06. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
borland c | Sugarcoocking man | Общие вопросы C/C++ | 2 | 12.06.2010 19:03 |
Borland C | J-lo | Помощь студентам | 1 | 15.04.2010 23:20 |
не могу запустить ехешник ,Borland 5 и Borland 6 | error_13 | Общие вопросы C/C++ | 0 | 31.01.2010 14:04 |
Borland c++ | ARSENAL | Помощь студентам | 1 | 22.11.2009 12:36 |
Borland | Paul_AG | Общие вопросы C/C++ | 4 | 18.06.2009 14:36 |