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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 20:46   #1
maxefficiently
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 42
Вопрос Номер Символа в Строке. Подсчёт.

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

Имеется строка:
a1,b2,c4,a7,b2 3e,6e,6h,\4e,5a#13#10d4,c5,c8,e3,a8 ,c9,c4,c6,\ 4e,8f и т.д.

Нужные символы: "a-f" или "0-9", остальное - мусор.

Как найти Номер по счёту в строке 37-го символа "a-f" или "0-9" в строке выше?

Например разберём строку (нужно узнать номер 6-го символа "a-f" или "0-9" в замусоренной строке):
1) а-№1
2) 1-№2
3) запатая (не "a-f" или "0-9")
4) b-№3
5) 2-№4
6) запятая (не "a-f" или "0-9")
7) с-№5
8) 4-№6

Ответ: 6-й символ (4) является 8-м символом по счету в строке (2-е запятые встретились).

А мне нужно найти номер не шестого, а 37-го.

Дополнение: в строке может быть #13#10, поэтому это будет считаться за 2 символа.

Имею код, но он какое-то левое число выдаёт:

Код:
a:=1;
b:=1;
  while a<>37 do //Ждём пока наступит требуемый 37-й символ
  begin
  if  (DampString[b]='a') or (DampString[b]='b') or (DampString[b]='c') or (DampString[b]='d')
  or (DampString[b]='e')or (DampString[b]='f')then  a:=a+1;

   if  (DampString[b]='1') or (DampString[b]='2') or (DampString[b]='3') or (DampString[b]='4')
  or (DampString[b]='5')or (DampString[b]='6')or (DampString[b]='7')
  or (DampString[b]='8')or (DampString[b]='9')then  a:=a+1;

   if (DampString[b]=#13) then b:=b+1;

  b:=b+1; // То, что требуется узнать!!! Сколько символов до нужного 37-го
  end;
Спасибо за помощь.
maxefficiently вне форума Ответить с цитированием
Старый 15.05.2011, 21:38   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

ЧТО ЭТО?

Все на много проще:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  //Удалим все пробелы знак запятой и символ \
function DeleteProbels(aStr:string):string;
var
  s:string;
  i:Integer;
begin
  s:=aStr;
  for i:=1 to Length(S) do
  begin
   If (S[i] = ',') or (S[i] = ' ') or (S[i] = '\')  then
   begin
     Delete(s,i,1);
   end;
  end;
  Result:=s;
end;

var
  i:integer;
  s:string;
begin
  s:=DeleteProbels(Edit1.Text);
  for i:=1 to Length(s) do
  begin
  If (s[i] in ['a'..'z']) or (StrToInt(s[i]) in [1..9]) then
  begin
  Memo1.Lines.Add('Символ: '+s[i]+' - №'+IntToStr(i));
  end else
  Break;
  end;
end;
возникли проблемы с знаками \. Лень разбираться.
Человек_Борща вне форума Ответить с цитированием
Старый 15.05.2011, 23:53   #3
maxefficiently
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 42
Вопрос

Мне не нужно ничего удалять. Только подсчитать №.

Лучше на примере понять.

Есть текст: А%%Б?А!!В??

Вопрос: какой 4-й по счёту символ из А,Б,В занимает место в строке выше.

Ответ:

1) А -№1 по счету символ
2) % - пропуск
3) % - пропуск
4) Б -№2 по счету символ
5) ? - пропуск
6) А - №3 по счету символ
7) ! - пропуск
8) ! - пропуск
9) В - №4 по счету символ

Ответ: четвертый по счету символ из А,Б,В имеет позицию 9 в строке.

В строке кроме А,Б,В могут стоять любые символы (в том числе и #13#10).
maxefficiently вне форума Ответить с цитированием
Старый 16.05.2011, 00:46   #4
maxefficiently
Пользователь
 
Регистрация: 12.02.2011
Сообщений: 42
По умолчанию

Всем спасибо, ответ тут: http://forum.sources.ru/index.php?sh...&#entry2894707
maxefficiently вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать номер символа в строке. roman_1985 Помощь студентам 1 06.12.2010 09:56
подсчёт символов с в строке Proger_1 Общие вопросы C/C++ 10 13.03.2010 20:42
Подсчёт гласных в строке Геннадий Вершинин Microsoft Office Word 1 11.12.2009 16:00
Номер символа в строке Veroonya SQL, базы данных 4 24.08.2009 15:04
Подсчёт пробелов в ведённой строке prikolist Общие вопросы C/C++ 10 10.04.2009 15:52