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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2011, 14:52   #1
Lidiya585
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 29
Вопрос Удалить из слова гласные, встречающиеся дважды

Задание: удалить из слова те гласные, что встречаются дважды.
Код, который я написала
Код:
//---------------------------------------------------------------------------
#include <vcl.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)
{
AnsiString word;
char b;
int p;
word = Edit1->Text;
for (int i=0; i<=word.Length(); i++)
if ((b=='à')||(b=='å')||(b=='¸')||(b=='è')||(b=='î')||(b=='ó')||
(b=='û')||(b=='ý')||(b=='þ')||(b=='ÿ'))
p++;
if (p==2)
word=word.Delete(b);
}
(гласные некорректно скопировались)
word.Delete(b), как я поняла, здесь использовать нельзя. А что тогда нужно использовать?
Lidiya585 вне форума Ответить с цитированием
Старый 05.11.2011, 16:03   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

У Вас несколько ошибок.
1. Если переменная word изменяется внутри цикла, использовать цикл for нельзя.
2. У Вас переменная p нигде не обнуляется.
3. Переменная p реагирует не на парные гласные
а на все гласные. и удаляет вторую встретившуюся.
4. Удаляются (учитываются) только пописные гласные, заглавные не учитываются.
5. word=word.Delete(b); записывается как word=word.Delete(b,1);
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 05.11.2011 в 16:12.
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.11.2011, 18:11   #3
Lidiya585
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 29
По умолчанию

Частично переделала. Как сделать, чтобы удалялись именно две повторяющиеся гласные?
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString word;
char b;
int p=0, i=0;
word = Edit1->Text;
i++;
while (i<=word.Length())
{
if ((b=='а')||(b=='е')||(b=='ё')||(b=='и')||(b=='о')||(b=='у')||
(b=='ы')||(b=='э')||(b=='ю')||(b=='я'))
p++;
if (p==2)
word = word.Delete(b,1);
}
Label2 -> Caption=word;
}
Lidiya585 вне форума Ответить с цитированием
Старый 05.11.2011, 18:54   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Код:
int gl[10];// Массив счётчиков гласных
for(int i=1; i < 8; i++) gl[i] = 0;// Обнуляем массив
for(int i=1; i < word.Length(); i++)
{
  switch(LowerCase(word[i]))// Приводим к нижнему регистру
  {
    case 'a': gl[i]++;// Подсчитываем гласные
    ........
    case 'я': gl[i]++;
  }
}
Дальше подумай сама, как удалить гласные используя инфу в массиве gl.
Могу подсказать. Удалять буквы нужно с "хвоста" строки.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 05.11.2011 в 18:59.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе текста нужно выкинуть все слова которые заканчиваются на гласные (С++) dembel11 Помощь студентам 0 10.05.2011 12:48
дан целочисленный массив N. Удалить из массива все элементы,встречающиеся [менее двух раз]1 Zevsnet Паскаль, Turbo Pascal, PascalABC.NET 6 16.01.2011 18:01
Удалить все слова, встречающиеся более 2 раз kat297 Общие вопросы Delphi 3 11.06.2010 16:27
[Си] В String1 удалить все слова, встречающиеся в String2 и String3 одновременно. 4Fun Помощь студентам 0 22.02.2010 19:17
Найти все слова встречающиеся более одного раза(Си).Использовать двумерный массив. persalena Помощь студентам 1 07.12.2008 00:46