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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2019, 12:20   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Переменная st описана как глобальная
во-первых, не используйте глобальных переменных, если не знаете зачем они нужны и не можете обосновать, зачем именно здесь глобальная переменная и почему нельзя её заменить на локальную.

Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
, там содержится пробел
во-вторых, ну и что Вы пытаетесь в строке, в которой есть один пробел?
Какие слова там появятся? И откуда? Самозарождение слов и двух пробелов?

в-третьих, для чего Вы прочитали текстовый файл в Мемо? Просто так?
Или Вы собирались обрабатывать прочитанный текст?

в-четвёртых, Вы сразу не ту задачу решаете. Вам нужно удалить слова, которые начинаются на одну и ту же букву,
а Вы пытаетесь найти (??? удалить) слова, которые начинаются на первую букву первого слова.
Разницу видите? Или пояснить на примере?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2019, 12:20   #12
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Если я убираю эту строку: st:=' '+st; выдаёт ошибку: Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0045EF57' in module 'Project1.exe'. Read of address 00000000'. Process stopped. Use Step or Run to continue.
Enotik_1998 вне форума Ответить с цитированием
Старый 16.04.2019, 12:23   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Если я убираю эту строку: st:=' '+st;
так Вы ещё пару пробелов добавьте. Может оно само и заработает.


Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
выдаёт ошибку: Project Project1.exe raised exception class EAccessViolation with message
а ошибку обращения к памяти искать не надо. Эта ошибка сама по себе рассосётся.

перечитайте выше мой пост #11
подумайте, что не так и что надо исправить.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.04.2019, 12:24   #14
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А вы подумайте, что произойдет тут:
Код:
delete(st,i,1);
until (st[i]=' ')
в st у вас был один символ, вы его удалили и читаете что? где?
p51x вне форума Ответить с цитированием
Старый 16.04.2019, 12:50   #15
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Вот я сделал, оно удаляет все слова, которые начинаются на 1 букву первого слова:
Код:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
st:string;
h:char;
begin
if combobox1.ItemIndex = 1 then
begin
RadioGroup1.ItemIndex:=1;
For i:=0 to Memo1.Lines.Count-1 do
st:=Memo1.Lines[i];
h:=st[1];
repeat
i:=pos(' '+h,st);
inc(i);
if i<>1 then
repeat
delete(st,i,1);
until (st[i]=' ')or(i=length(st)+1);
until  i=1;
ListBox1.Items.Add('Полученная строка = ' + st);
end;
Как сделать чтобы удалялись слова, которые начинаются на 1 и ту же букву? И как сделать ввод этой буквы?
Enotik_1998 вне форума Ответить с цитированием
Старый 16.04.2019, 20:23   #16
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

На первом проходе определить повторяющиеся первые буквы слова, для чего, к примеру, завести массив структур {первый_символ char; число_повторений int} Потом уж по этому массиву удалять провинившихся слов.
Ввод буквы делать не надо, она сама определится по результатам первого прохода.

Последний раз редактировалось digitalis; 17.04.2019 в 09:34.
digitalis вне форума Ответить с цитированием
Старый 17.04.2019, 08:31   #17
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
На первом проходе определить повторяющиеся первые буквы слова, для чего, к примеру, завести массив структур {первый_символ char; число_повторений int} Потом уж по этому массиву удалять провинившихся слов.
Ну и как это сделать? Просто я не шарю в delphi7. Пожалуйста, скиньте готовый код. Просто это последняя задача в контрольной. Помогите её сделать и я покину это форум на полгода.

Последний раз редактировалось Enotik_1998; 17.04.2019 в 09:55.
Enotik_1998 вне форума Ответить с цитированием
Старый 17.04.2019, 09:14   #18
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Не, мне лень. Ишшо вникать, как там разбивка текста на слова... Ну его в качель.
Неверов сделает, он это любит.
digitalis вне форума Ответить с цитированием
Старый 17.04.2019, 10:08   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Ну коль делфи, то и его возможности, а не просто паскалевские циклы)
Код:
function MyDeleteWords(Text: String): String;
type TMyRecord = record Symbol: Char; Count: Integer; end;
var List: TStringList;
    i,j: Integer;
    m: array of TMyRecord;
function FindSymbol(pSymbol: Char): Integer;
var ti: Integer;
    ts: Char;
begin
  ts:=AnsiUpperCase(pSymbol)[1];
  for ti:=0 to High(m) do if m[ti].Symbol=ts then begin Result:=ti; Exit; end;
  Result:=-1;
end;
begin
  List:=TStringList.Create;
  try
    List.Delimiter:=' ';
    List.DelimitedText:=Text;
    for i:=0 to List.Count-1 do begin
      j:=FindSymbol(List.Strings[i][1]);
      if j=-1 then begin
        SetLength(m,Length(m)+1);
        j:=High(m);
        m[j].Symbol:=AnsiUpperCase(List.Strings[i])[1];
      end;
      Inc(m[j].Count);
    end;
    Result:='';
    for i:=0 to List.Count-1 do begin
      j:=FindSymbol(List.Strings[i][1]);
      if m[j].Count=1 then Result:=Result+' '+List.Strings[i];
    end;
    Result:=Trim(Result);
  finally
    List.Free;
  end;  
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.04.2019, 10:57   #20
Andrey_1998
 
Регистрация: 17.04.2019
Сообщений: 8
По умолчанию

спасибо
Andrey_1998 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками в delphi7: преобразовать переменную типа char в строку и наоборот Enotik_1998 Компоненты Delphi 2 12.04.2019 10:55
Работа со строками в delphi7 Enotik_1998 Компоненты Delphi 16 11.04.2019 14:14
Работа со строками в delphi7 Enotik_1998 Компоненты Delphi 0 10.04.2019 13:31
Работа со строками в delphi7 Enotik_1998 Компоненты Delphi 2 08.04.2019 11:39
Беда со строками в delphi7 pimple2006 Общие вопросы Delphi 16 02.12.2012 21:58