Модули работы со строками и не только.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Модули работы со строками и не только.

Сообщение gen » 13.08.2009 15:55:41

Мне надо вытащить подстроку из строки, разграниченную символами"(" и ")".
То есть например:
input
vasya(fff)
output
fff

Какие стандартные ф-ии есть для этого? Где нибудь можно на русском почитать о ф-иях скрытых в стандартных модулях(Windows, Strings, DbCtrls и тд)?
Можно и самому такую ф-ию написать,но зачем делать её если она есть ,только скрыта в каком-то модуле.
gen
новенький
 
Сообщения: 74
Зарегистрирован: 18.06.2009 21:04:22

Re: Модули работы со строками и не только.

Сообщение trius-strannik » 13.08.2009 17:35:51

Ну примитивно можно так:
Код: Выделить всё
var stroka : string;
uchastok : string;
nomer1,nomer2 : integer;
begin
readln(stroka);
nomer1:=pos('(',stroka);
nomer2:=pos(')',stroka);
uchastok:=copy(stroka,nomer1+1,nomer2-nomer1-1);
write(uchastok);
readln
end.

и всё открытыми средствами...

Добавлено спустя 1 минуту 41 секунду:
Кстати здесь нет проверки на результат, так что осторожно...

Добавлено спустя 4 минуты 21 секунду:
На всякий случай: pos('(',stroka); - определяет положение строки в подстроке;
copy(stroka,nomer1+1,nomer2-nomer1-1); - сопирует разграниченный началом и длинной фрагмент строки... :mrgreen:

Добавлено спустя 1 минуту 12 секунд:
На всякий случай: pos('(',stroka); - определяет положение строки в подстроке;
copy(stroka,nomer1+1,nomer2-nomer1-1); - сопирует разграниченный началом и длинной фрагмент строки... :mrgreen:
Аватара пользователя
trius-strannik
новенький
 
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск

Re: Модули работы со строками и не только.

Сообщение gen » 13.08.2009 17:56:25

trius-strannik писал(а):Ну примитивно можно так:
Код: Выделить всё
var stroka : string;
uchastok : string;
nomer1,nomer2 : integer;
begin
readln(stroka);
nomer1:=pos('(',stroka);
nomer2:=pos(')',stroka);
uchastok:=copy(stroka,nomer1+1,nomer2-nomer1-1);
write(uchastok);
readln
end.

и всё открытыми средствами...

Добавлено спустя 1 минуту 41 секунду:
Кстати здесь нет проверки на результат, так что осторожно...

Добавлено спустя 4 минуты 21 секунду:
На всякий случай: pos('(',stroka); - определяет положение строки в подстроке;
copy(stroka,nomer1+1,nomer2-nomer1-1); - сопирует разграниченный началом и длинной фрагмент строки... :mrgreen:

Добавлено спустя 1 минуту 12 секунд:
На всякий случай: pos('(',stroka); - определяет положение строки в подстроке;
copy(stroka,nomer1+1,nomer2-nomer1-1); - сопирует разграниченный началом и длинной фрагмент строки... :mrgreen:


это я знаю. Удивительно что нет описание модулей на русском нигде.
gen
новенький
 
Сообщения: 74
Зарегистрирован: 18.06.2009 21:04:22

Re: Модули работы со строками и не только.

Сообщение trius-strannik » 13.08.2009 17:58:40

Тогда извеняй, это тебе прямиком в переводчик, глядишь и ещё кому поможешь... :D
Аватара пользователя
trius-strannik
новенький
 
Сообщения: 23
Зарегистрирован: 11.06.2009 07:19:24
Откуда: Томск

Re: Модули работы со строками и не только.

Сообщение Climber » 13.08.2009 18:06:49

gen писал(а):Какие стандартные ф-ии есть для этого? Где нибудь можно на русском почитать о ф-иях скрытых в стандартных модулях(Windows, Strings, DbCtrls и тд)?

В модуле Windows объявлены API функции Windows. Почитать про них можно в MSDN. На мой скромный взгляд, информация в MSDN организована довольно тупо, и поиск по MSDN тоже туповат (гугл находит нужную мне информацию в MSDN лучше, чем сам MSDN. А все потому, что у кого-то кривые руки) но жить можно. Есть еще куча сайтов, где есть перевод на русский того, что написано в MSDN, но там все еще тупее.
В модуле StrUtils есть куча функций для работы со строками. Почитать можно в справке по Delphi. И в гугле. Тупо: открыл модуль, взял первую функцию, вбил название в гугл, прочитал, понял. И так пока не найдешь что надо.
В модуле FileUtils (кажется) есть куча функций по конвертации из одной кодировки в другую.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Модули работы со строками и не только.

Сообщение aleksander » 22.10.2009 19:52:09

Подскажите пожалуйста как слово строки(разделенное пробелами)записать в масив строк
1 слово строки - 1-й елемент
2 слово строки - 2-й елемент
и т.д.
aleksander
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.10.2009 19:44:12

Re: Модули работы со строками и не только.

Сообщение Climber » 26.10.2009 15:11:57

C помощью функции StringReplace заменить все пробелы на #10, потом строку запихать в объект TStringList... TStringList не совсем массов, но смысл тот же и обращаться можно как к массиву.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Модули работы со строками и не только.

Сообщение v-t-l » 26.10.2009 17:26:25

2aleksander
Код: Выделить всё
program project1;

uses
  SysUtils;

const
  Alpha=['A'..'Z','a'..'z','0'..'9'];
  MAXWORDS = 100;

var
  str,tmp: string;
  L, i, j, wc, ac, AL, wl: integer;
  isWord: Boolean;
  words: array[1..MAXWORDS] of string;

begin
//  writeln('Enter string...');
//  readln(str);
  str := ' dddd DDsSW  wewew  WEDWDW    dsdsdsss,ddd www';
  writeln(str);
  L := Length(str);
  SetLength(tmp, L);
  FillChar(tmp[1],L,' ');

  ac := 0; //Всего Alpha-символов
  wc := 0; //Всего слов
  wl := 0; //Длина последнего слова
  j := 0;  //Индекс во временной строке
  isWord := False; // последний проверенный символ принадлежал слову

  for i := 1 to L do
    if str[i] in Alpha then
    begin
      ac := ac + 1;
      wl := wl + 1;
      isWord := True;
      j := j + 1;
      tmp[j] := str[i];
    end
    else
      if isWord then
      begin
        wc := wc + 1;
        j := j + 1;
        words[wc] := copy(tmp, j - wl, wl);
        wl := 0;
        tmp[j] := ' ';
        isWord := False;
      end;
  if isWord then
  begin
    wc := wc + 1;
    words[wc] := copy(tmp, j - wl, wl);
  end;
  tmp := Copy(tmp,1,j);
  AL := Round(ac/wc);

  writeln(tmp, ' ', AL, ' ');
  readln;
end.

почти все твое задание :). Допили, где нужно.
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

Рейтинг@Mail.ru