Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 00:03   #1
~eXe~
Новичок
Джуниор
 
Регистрация: 15.06.2010
Сообщений: 2
По умолчанию Borland C++

Программа поочерёдно выделяет слова в тексте и считает количество слов в тексте. А нужно чтобы она выделяла и считала слова, заканчивающиеся на гласную букву. Не могу понять как это можно реализовать?
~eXe~ вне форума Ответить с цитированием
Старый 16.06.2010, 00:04   #2
~eXe~
Новичок
Джуниор
 
Регистрация: 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.
~eXe~ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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