Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TMemo, Обращение к отдельным словам текста 
:(
    Опции темы
Khan
Дата 6.11.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Здравствуйте! У меня yа форме два Memo, нужно брать текст из Memo1 по словам, преобразовать и поместить в Memo2. Т.е.
- берем первое слово текста из Memo1,
- преобразовываем его,
- помещаем в Memo2;
- берем следующее слово из Memo1,
...
...
и так до конца текста.

Вопрос в следующем: Я раньше с Memo толком не работал, и не знаю как "брать" отдельные слова из его текста? Заранее благодарю.
PM MAIL   Вверх
Grom
Дата 6.11.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



Khan, только парсить Memo на пробелы и выдирать слова.
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Rodman
Дата 6.11.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



ну если ты из строки можешь выбрать слова то обьяви переменную и
Код

MyVar=Memo1->Text


так весь текст занесешь в нее и разбирай

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Romikgy
Дата 6.11.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Цитата(Khan @  6.11.2006,  13:40 Найти цитируемый пост)
- преобразовываем его,

как?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 6.11.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Если можно, хотелось бы пример поподробней. Romikgy, преобразовываем (шифруем, например) не столь важно пока, суть вопроса: как по очереди выбирать слова из текста Memo?
PM MAIL   Вверх
Romikgy
Дата 6.11.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



Khan, тогда зачем по словам?
и что в твоем понимание слово?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
apook
Дата 6.11.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 0
Всего: 23



strtok-ом по пробелам разбей строку
Цитата

Код

MyVar=Memo1->Text




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Grom
Дата 6.11.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



Khan, ну я ж сказал... вот тебе примерный код
Код

#include "StrUtils.hpp"
.
.
.
int i,j;
i=0;
j=0;
AnsiString Word,N;
N=Memo1->Text;
do
{
i=N.Pos(" ");
 if (i!=0)
  {
   Word=N.SubString(1,i);
   //тут твоя шифрация слова которое хранится в Word
   N=N.SubString(i+1,70000);
  }
  else
  {
   Word=N;
   //тут твоя шифрация слова которое хранится в Word
  }
}
while (i!=0);

правда последнее слово берётся в конце с ентором. как его убрать - не додумался.

Это сообщение отредактировал(а) Grom - 6.11.2006, 21:51
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
apook
Дата 6.11.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 0
Всего: 23



Непонятно надо преобразовать слова в строке при этом строку оставит или
именно разбить на слова

для второго случая:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//int Size = Memo1->Text.Length();

int Size = Memo1->GetTextLen();
Size++;
char *MyVar=new char[Size];
Memo1->GetTextBuf(MyVar, Size);

strtok(MyVar, " \n\0");
for(;  ;)
{
if(MyVar)
{
        //Здесь что нибудь зделал
        //..
        Memo2->Lines->Add(MyVar);
        }
else    break;
MyVar =strtok(NULL, " \n\0");
        }
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Romikgy
Дата 6.11.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 11
Всего: 146



имхо можно сделать проще через TStringList


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Khan
Дата 7.11.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Прошу прощения, если я непонятно разъясняю проблему. Вообще у меня идея такая. Я нашел программу на C++ шифрование треугольником Паскаля:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
...
Ровно k букв в слове -> ровно k числел в выбранной строке треугольника Паскаля:
_с т о л_    <- слово
  1 3 3 1     <- строка в треугольнике паскаля
Закодированное слово будет 'с'+1, 'т'+3, 'о'+3, 'л'+1, то есть "тхсм" . Вот код программы:
Код

#include <conio.h>
#include <stdio.h>
#include <string.h>

char abc[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя\0";
int m[20][20];

void build()               //эта процедура заполняет треугольник Паскаля
{
for(int t=0; t<20; t++)
{
m[0][t]=1;
m[t][0]=1;
}
for(t=1; t<19; t++)
for(int x=1; x<=t; x++)
m[t-x+1][x]=m[t-x][x]+m[t-x+1][x-1];
}

void print()                     //эта проседура выводит его на экран
{
for(int x=0; x<20; x++)
{
for(int y=0; y<20; y++)
if(x+y<13)
printf("%3d ", m[x][y]);
printf("\n");
}
}

void getWord(char *str, char *s)       //следующая процедура ищет в строке str слово (до первого пробела ''), записывает его в s, и удаляет из str все слово вместе с пробелом
{
for(int t=0; t<strlen(str); t++)
if(str[t]!=' ')s[t]=str[t];else break;
for(int i=t+1; i<strlen(str); i++)
str[i-t-1]=str[i];
str[i-t-1]=0;
s[t]=0;
}

int find(char *str, char ch) //эта функция ищет символ ch в строке str и возвращает его положение, либо возвр. -1 если символ не найден.
{
for(int t=0; t<strlen(str); t++)
if(str[t]==ch)return t+1;
return -1;
}

void encode(char *str) // эта процедура, собственно, производит шифрование
{
char s[50], res[50];
res[0]=0;
int len=0;
int a,b,c;
for(;;)
{
getWord(str, s);
len=strlen(s);
if(strcmp(s, "")==0)break;
for(int t=0; t<len; t++)
{
a=find(abc,s[t]);
b=a+m[len-t-1][t];
if((a<=33 && b>33)||(a>33)&&(b>66))b-=33;
s[t]=abc[b-1];
}
if(res[0]!=0)strcat(res, " ");
strcat(res, s);
}
printf("Encoded string is \"%s\"", res);
}

void main()
{
clrscr();
build();
print();
encode("");
getch();
}

Я хочу сделать эту программу на Buildere, только потом внесу изменения в функцию шифрования. В Memo1 исходный текст, шифруем треугольником Паскаля и помещаем шифрованный текст в Memo2.
Напимер, исходный текст в Memo1:
Я из лесу вышел
Был сильный мороз

Жмем Button и шифрованный текст в Memo2:
А йи мзфф гяюим
Вэм тоъпьбк нтцти

 smile   smile  please  smile 
PM MAIL   Вверх
Rodman
Дата 7.11.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

#include <conio.h>
#include <stdio.h>
#include <string.h>
char abc[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУЙХЦЧШЩЪЫЬЭЮЯабвгдеёжзиклмнопрстуфхцчшщъыьэюя\0";
int m[20][20];
void build()               //эта процедура заполняет треугольник Паскаля
{for(int t=0; t<20; t++)
 {m[0][t]=1;
   m[t][0]=1;
 }
 for(t=1; t<19; t++)
    for(int x=1; x<=t; x++)
        m[t-x+1][x]=m[t-x][x]+m[t-x+1][x-1];
}

void printCode()                     //эта проседура выводит его на экран
{ for(int x=0; x<20; x++)
   { for(int y=0; y<20; y++)
          if(x+y<13)
             Memo->Lines->add(m[x][y]);
    }
}

void getWord(char *str, char *s)       //следующая процедура ищет в строке str слово (до первого пробела ''), записывает его в s, и удаляет из str все слово вместе с пробелом
{for(int t=0; t<strlen(str); t++)
       if(str[t]!=' ')
              s[t]=str[t];
       else 
              break;
       for(int i=t+1; i<strlen(str); i++)
            str[i-t-1]=str[i];
       str[i-t-1]=0;
       s[t]=0;
}

int find(char *str, char ch) //эта функция ищет символ ch в строке str и возвращает его положение, либо возвр. -1 если символ не найден.
{  for(int t=0; t<strlen(str); t++)
        if(str[t]==ch)
           return t+1;
        return -1;
}

void encode(char *str) // эта процедура, собственно, производит шифрование
{ char s[50], res[50];
   res[0]=0;
   int len=0;
   int a,b,c;
   for(;;)
   { getWord(str, s);
      len=strlen(s);
      if(strcmp(s, "")==0)
            break;
      for(int t=0; t<len; t++)
      { a=find(abc,s[t]);
         b=a+m[len-t-1][t];
         if((a<=33 && b>33)||(a>33)&&(b>66))
              b-=33;
         s[t]=abc[b-1];
     }
     if(res[0]!=0)strcat(res, " ");
         strcat(res, s);
   }
  Memo2->Lines->text=res;
}

//здесь определи нажатие клавиши и в нем этот текст
{ build();
   printCode();
   encode(Memo->Text);
}


Добавлено @ 13:23 
я не проверял, писал в IE
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Khan
Дата 8.11.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Rodman, вылетают такие сообщения:

  [C++ Warning] Unit1.cpp(42): W8012 Comparing signed and unsigned values
  [C++ Warning] Unit1.cpp(47): W8012 Comparing signed and unsigned values
  [C++ Warning] Unit1.cpp(54): W8012 Comparing signed and unsigned values
  [C++ Error] Unit1.cpp(90): E2034 Cannot convert 'AnsiString' to 'char *'
  [C++ Error] Unit1.cpp(90): E2342 Type mismatch in parameter 'str' (wanted 'char *', got 'AnsiString')


Первые три предупреждения на строки типа:
Код

for(int t=0; t<strlen(str); t++)


Последние два на строку:
Код

encode(Form1->Memo1->Text);

 smile 
PM MAIL   Вверх
Rodman
Дата 8.11.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Все ошибки на не соответствие типов... я же говорил, что не проверял...

Сделай приведение типов и должно пойти...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Khan
Дата 8.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Цитата

Сделай приведение типов и должно пойти... 


 smile   smile 
 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.