Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Упорядочить слова в предложении

11K
15 апреля 2008 года
zuze
84 / / 07.03.2008
Упорядочить слова в предложении.
То есть, если у меня предложение такое.
hard you down read.
Должно быть так
you down hard read

Я хочу пока только построчно вывести слова в нужном порядке.
Но в Memo1 вообще ни чего не выводится.

Подскажите пожалуйста, что я не так сделал.

Вот код.

Код:
//------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int kolprobelov;
int numedit;
char ch[19] = {'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n',
               'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z'};
char glac[7] = {'a', 'e', 'i', 'j', 'o', 'u', 'y'};
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString tempword1;
   char *tempword2;
   kolprobelov = 0;
   AnsiString str = Edit1->Text;
   // Удаляем точку
   str.Delete(Edit1->Text.Length(), 1);
   // Ставим в конце предложения пробел
   str.Insert(" ", Edit1->Text.Length());
   // Определение количества пробелов
   for (int i = 1; i <= Edit1->Text.Length(); i++)
   {
      if (str == ' ')
         kolprobelov += 1;
   }
   // Динамическое создание компонентов под слово
   numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = new TEdit(this);
      edit->Parent = this;
      edit->Name = "edit"+AnsiString(numedit);
      edit->Height = 21;
      edit->Width = 121;
      edit->Left = 448;
      edit->Top = (i+10)*edit->Height;
      edit->Text = "";
      numedit += 1;
   }
   // Разбиваем предложение на слова
   numedit = 3;
   for (int i = 1; i <= str.Length(); i++)
   {
      AnsiString word = "";
      if (str == ' ')
      {
         for (int j = 1; j < i; j++)
            word += str[j];
         TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
         edit->Text = word;
         numedit += 1;
         str.Delete(1, i);
         i = 1;
      }
   }
   // Редактирование предложения
   numedit = 3;
   char *symbols = new char [kolprobelov];
   for (int i = 0; i < kolprobelov; i++)
   {
      tempword1 = "";
      TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
      tempword1 = edit->Text;
      tempword2 = tempword1.c_str();
      symbols = tempword2[0];
      numedit++;
   }
   // Сортировка
   int k, x;
   for( int i = 0; i < kolprobelov; i++)
   {     // i - номер текущего шага
      k = i;
      x = symbols;
      for ( int j = i+1; j < kolprobelov; j++)  // цикл выбора наименьшего
                                                             элемента
      {
         if (  symbols[j] < x )
         {
           k = j;
           x = symbols[j];         // k - индекс наименьшего элемента
         }
      }
      symbols[k] = symbols;
      symbols = x;      // меняем местами наименьший с symbols
   }
   // Вывод
   for (int i = 3; i < kolprobelov+2; i++)
   {
      TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(i));
      tempword1 = edit->Text;
      char *tempword2 = tempword1.c_str();
      for (int j = 0; j < 7; j++)
      {
         if (tempword2[0] == symbols)
           Memo1->Lines->Add(edit->Text);
      }
   }
   for (int i = 3; i < kolprobelov+2; i++)
   {
       TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(i));
      tempword1 = edit->Text;
      char *tempword2 = tempword1.c_str();
      for (int j = 0; j < 19; j++)
      {
         if (tempword2[0] == symbols)
           Memo1->Lines->Add(edit->Text);
      }
   }
}
//------------------------------------------------------------------------
// Удаление слов
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
      delete edit;
        numedit +=1;
   }
}
//------------------------------------------------------------------------
11
15 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата:

То есть, если у меня предложение такое.
hard you down read.
Должно быть так
you down hard read


че то я не увидел здесь никакого смысла?
упорядочить по какому признаку надо?

11K
15 апреля 2008 года
zuze
84 / / 07.03.2008
Ну сначала все слова начинающиеся с гласной в порядке их возростания, а затем слова начинающиеся с согласной в порядке их возростания.
11
15 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
Код:
Set <char, 'a, 'y'> gl_set;
  Set <char, 'b', 'z'> sogl_set;
  gl_set<<'a'<< 'e'<< 'i'<< 'j'<< 'o'<< 'u'<< 'y';
  sogl_set<<'b'<< 'c'<< 'd'<< 'f'<< 'g'<< 'h'<< 'k'<< 'l'<< 'm'<< 'n'<< 'p'<< 'q'<< 'r'<< 's'<< 't'<< 'v'<< 'w'<< 'x'<< 'z';

  TStringList *lst = new TStringList;
  TStringList *tmplst = new TStringList;
  lst->Delimiter = ' ';
  lst->DelimitedText = Edit1->Text;
  for (int i=0;i<lst->Count; i++)
        if (!sogl_set.Contains(lst->Strings[1]))tmplst->Add(lst->Strings);
  tmplst->Sort();
  AnsiString str;
  for (int i=0;i<tmplst->Count; i++)
        str+= tmplst->Strings + " ";

  lst->Clear();
  tmplst->Clear();
  lst->Delimiter = ' ';
  lst->DelimitedText = Edit1->Text;
  for (int i=0;i<lst->Count; i++)
        if (!gl_set.Contains(lst->Strings[1]))tmplst->Add(lst->Strings);
  tmplst->Sort();
  for (int i=0;i<tmplst->Count; i++)
        str+= tmplst->Strings + " ";
  delete lst;
  delete tmplst;
  Edit1->Text = str;
11K
15 апреля 2008 года
zuze
84 / / 07.03.2008
Большое спасибо, работает.
А в моём коде почему в Memo1 ни чего не выводится.
11K
15 апреля 2008 года
zuze
84 / / 07.03.2008
Исправил сортировку

Вот код

Код:
// Сортировка
   int min;
   for ( int i = 0; i < kolprobelov-1; ++i )
   {
      int min = i;
      for ( int j = i + 1; j < kolprobelov; ++j )
         if ( symbols[min] > symbols[j] )
            min = j;
      char tmp = symbols;
      symbols = symbols[min];
      symbols[min] = tmp;
   }


Проверил её

Вот код

Код:
for (int i = 0; i < kolprobelov; i++)
   {
      for (int j = 0; j < 7; j++)
      {
         if (symbols == glac[j])
           Memo1->Lines->Add(symbols);
      }
   }
   for (int i = 0; i < kolprobelov; i++)
   {
      for (int j = 0; j < 19; j++)
      {
         if (symbols == ch[j])
           Memo1->Lines->Add(symbols);
      }
   }


Результат работы я ввожу
sd a hg mpr yy aa.
Вывод
a
a
y
h
m
s

Но как сделать чтобы правельно работал этот код непойму, помогите пожалуйста.

Код

Код:
for (int i = 3; i < kolprobelov+2; i++)
   {
     TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(i));
     tempword1 = edit->Text;
     char *tempword2 = tempword1.c_str();
     for (int j = 0; j < 7; j++)
     {
       if (tempword2[0] == glac[j])
         Memo1->Lines->Add(edit->Text);
     }
   }
   for (int i = 3; i < kolprobelov+2; i++)
   {
     TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(i));
     tempword1 = edit->Text;
     char *tempword2 = tempword1.c_str();
     for (int j = 0; j < 19; j++)
     {
       if (tempword2[0] == ch[j])
         Memo1->Lines->Add(edit->Text);
     }
   }


Результат этого кода
a
yy
sd
hg
mpr
А должно быть так
a
aa
yy
hg
mpr
sd

Помогите пожалуйста.
11K
16 апреля 2008 года
zuze
84 / / 07.03.2008
Сделал так

Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int kolprobelov;
int numedit;
char ch[19] = {'b', 'c', 'd', 'f', 'g', 'h', 'k', 'l', 'm', 'n',
               'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z'};
char glac[7] = {'a', 'e', 'i', 'j', 'o', 'u', 'y'};
AnsiString NewNas[100] ={" "};
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString tempword1;
   char *tempword2;
   kolprobelov = 0;
   AnsiString str = Edit1->Text;

   str.Delete(Edit1->Text.Length(), 1);

   str.Insert(" ", Edit1->Text.Length());

   for (int i = 1; i <= Edit1->Text.Length(); i++)
   {
      if (str == ' ')
         kolprobelov += 1;
   }

   numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = new TEdit(this);
      edit->Parent = this;
      edit->Name = "edit"+AnsiString(numedit);
      edit->Height = 21;
      edit->Width = 121;
      edit->Left = 448;
      edit->Top = (i+10)*edit->Height;
      edit->Text = "";
      numedit += 1;
   }

   numedit = 3;
   int z=0;
   for (int i = 1; i <= str.Length(); i++)
   {
      AnsiString word = "";
      if (str == ' ')
      {
         for (int j = 1; j < i; j++)
            word += str[j];
         TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
         edit->Text = word;
         NewNas[z] = word;
         z++;
         numedit += 1;
         str.Delete(1, i);
         i = 1;
      }
   }
   //Sorting
   for ( int i = 0; i < kolprobelov-1; i++)
   {
       for (int j=0; j < kolprobelov-1; j++)
       {
           AnsiString slowo = " ";
           if (strcmp(NewNas[j].c_str(), NewNas[j+1].c_str()) >= 0)
           {
              /*AnsiString temp = glac[j];
              if (strcmp(NewNas[j].c_str(), temp.c_str()) == 0)
              {*/
                 slowo = NewNas[j];
                 NewNas[j] = NewNas[j+1];
                 NewNas[j+1] = slowo;
              //}
           }
        }
   }

   for ( int z = 0; z < kolprobelov; z++)
       Memo1->Lines->Add(NewNas[z]);

}
//------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
      delete edit;
      numedit +=1;
   }

}
//------------------------------------------------------------------------


Но это не совсем правильно, так как
я ввожу
sd a hg mpr yy aa.
А результат такой
a
aa
hg
mpr
sd
yy
А должен быть такой
a
aa
yy
hg
mpr
sd

Помогите пожалуйста.
11
16 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
моим алгоритмом все правильно сортирует :)
(sd a hg mpr yy aa) => (a aa yy hg mpr sd)
11K
16 апреля 2008 года
zuze
84 / / 07.03.2008
Просто хочется написать дригим способом.
11
16 апреля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: zuze
Просто хочется написать дригим способом.



F1 и F8 в помощь

11K
16 апреля 2008 года
zuze
84 / / 07.03.2008
Задача решена.

Вот код

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<iostream>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int kolprobelov;
int numedit;
AnsiString ch[19] = {"b", "c", "d", "f", "g", "h", "k", "l", "m", "n",
               "p", "q", "r", "s", "t", "v", "w", "x", "z"};
AnsiString glac[7] = {"a", "e", "i", "j", "o", "u", "y"};
AnsiString NewNas[100] ={" "};
int number1=0;
using namespace std;
//------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   AnsiString tempword1;
   char *tempword2;
   kolprobelov = 0;
   AnsiString str = Edit1->Text;

   str.Delete(Edit1->Text.Length(), 1);
   str.Insert(" ", Edit1->Text.Length());

   for (int i = 1; i <= Edit1->Text.Length(); i++)
   {
      if (str == ' ')
         kolprobelov += 1;
   }

   numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = new TEdit(this);
      edit->Parent = this;
      edit->Name = "edit"+AnsiString(numedit);
      edit->Height = 21;
      edit->Width = 121;
      edit->Left = 448;
      edit->Top = (i+10)*edit->Height;
      edit->Text = "";
      numedit += 1;
   }

   numedit = 3;
   int z = 0;
   for (int i = 1; i <= str.Length(); i++)
   {
      AnsiString word = "";
      if (str == ' ')
      {
         for (int j = 1; j < i; j++)
            word += str[j];
         TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
         edit->Text = word;
         NewNas[z] = word;
         z++;
         numedit += 1;
         str.Delete(1, i);
         i = 1;
      }
   }
   // Sorting
   for (int j = 0; j < kolprobelov; j++)
   {
       AnsiString slowo = " ";
       for (int z = 0; z < 7; z++)
       {
           if ((strncmp(NewNas[j].c_str(),glac[z].c_str(),1) == 0))
           {
              swap(NewNas[number1],NewNas[j]);
              number1++;
           }
       }
   }
   for (int i = 0; i < number1-1; i++)
   {
       for (int j = 0; j < number1-1; j++)
       {
           AnsiString slowo = " ";
           if ((strcmp(NewNas[j].c_str(),NewNas[j+1].c_str()) >= 0))
           {
              slowo = NewNas[j];
              NewNas[j]=NewNas[j+1];
              NewNas[j+1]=slowo;
           }
        }
   }

   for (int i = number1; i < kolprobelov-1; i++)
   {
       for (int j = number1; j < kolprobelov-1; j++)
       {
           AnsiString slowo = " ";
           if ((strcmp(NewNas[j].c_str(),NewNas[j+1].c_str()) >= 0))
           {
              slowo = NewNas[j];
              NewNas[j]=NewNas[j+1];
              NewNas[j+1]=slowo;
           }
        }
   }
   for ( int k = 0; k < kolprobelov; k++)
       Memo1->Lines->Add(NewNas[k]);
}
//------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
numedit = 3;
   for (int i = 0; i < kolprobelov; i++)
   {
      TEdit *edit = (TEdit*)FindComponent("edit"+AnsiString(numedit));
      delete edit;
        numedit +=1;
   }

}
//------------------------------------------------------------------------
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог