Страница 1 из 1
		
			
				Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
23.12.2021 10:30:44 nixnixnix
				Задача: Найти все уникальные 3-символьные подстроки в строке
Написал программу в ПаскальABC - всё работает.
Преподаватель хочет на FreePascal.
На FreePascal IDE for Win32 1.0.12 программа отказывается работать. Ругается на неправильный тип во 2-ой строке.
Как поправить программу?
- Код: Выделить всё
- Program Zadanie2;
 type Mnoj=Set Of string[3];
 var S: string;
 i: integer;
 Mn3: Mnoj;
 begin
 write('String: ');
 readln(S);
 for i:=1 to length(S)-2 do
 Include(Mn3,S[i]+S[i+1]+S[i+2]);
 i:=0;
 writeln('Substring: ');
 foreach S in Mn3 do
 begin
 Write(S,' ');
 i:=i+1;
 end;
 writeln;
 writeln('Sum=',i);
 end.
 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
23.12.2021 15:02:24 zub
				Фрипаскаль не поддерживает множества на стрингах.
Кроме того, в фрипаскале utf8 по умолчанию, поэтому string[3] с русскими буквами дружить не будет (как собственно и utf16 из ПаскальABC не будет дружить с экзотическими кодировками)
Этот подход ты никак не исправишь, только переделывать на других структурах данных. замени множество на TDictionary или TMap или подобное, string[3] замени на просто string или unicodestring, для побуквенной индексации используй utf8 ориентированные варианты функций если будешь делать на string
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
23.12.2021 17:58:54 iskander
				Что-то сомнительно насчёт utf8 по умолчанию в fp ide for win32.
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
23.12.2021 18:47:58 SSerge
				zub писал(а):замени множество на TDictionary или TMap 
Преподаватель скорее всего ждёт использования базовых конструкций языка, а не дополнительных объектных библиотек.
Так что придется имитировать поведение операций с множеством на обычном массиве строк.
Добавлено спустя 24 минуты:- Код: Выделить всё
- rogram Zadanie2;
 var Mnoj: string;
 var S,S1: string;
 i: integer;
 begin
 write('String: ');
 readln(S);
 Mnoj:='';
 for i:=1 to length(S)-2 do
 begin
 s1:=copy(s,i,3);
 writeln(s1);
 if (pos(s1,mnoj)<=0) then mnoj+=s1+'|';
 end;
 i:=0;
 writeln('Substring: ',Mnoj);
 end.
 
 
для разнообразия ))
Добавлено спустя 2 минуты 8 секунд:да, работать будет только на буквах латинского алфавита и цифрах (скорее всего)
 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
23.12.2021 20:18:23 zub
				iskander
да, смутил номер версии как у лазаруса, подумал что лазарус и наврал))
незнаю как сейчас, раньше там было cp1251. "Проблемы" с utf8 похоже отпадают
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 10:38:03 Снег Север
				На самом деле, если пользоваться лазарем, а не древним  FreePascal IDE, то никаких особых проблем с utf8 нет - у всех стандартных строковых функций есть utf8 эквиваленты.
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 19:10:42 iskander
				Очевидно, что проблема топикстартера вовсе не в кодировке строк, а в реализации встроенного типа SET OF TYPE. Емнип, последний известный мне стандарт(Extended Pascal) настаивал, что этот самый TYPE должен быть порядковым(Ordinal), и понятно, что строки порядковым типом не являются.
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 19:32:16 Снег Север
				Про Set Of string во фрипаскале придется забыть, разумеется, и делать на массиве. Или списке.
			 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 20:13:42 iskander
				Снег Север писал(а):Про Set Of string во фрипаскале придется забыть
И что бы это значило?
 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 20:24:36 SSerge
				Снег Север писал(а):Про Set Of string во фрипаскале придется забыть, разумеется, и делать на массиве. Или списке.
В посте от 23.12 сделано без массива и списка. И работает. 

 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
26.12.2021 22:12:58 Снег Север
				iskander писал(а):И что бы это значило?
То, что сеты в нём возможны только на перечислимых типах.
 
			
		
			
				Re: Прошу помощи: Найти все уник 3-симв подстроки в строке
				
Добавлено: 
27.12.2021 12:31:05 iskander
				Насчёт перечислимых типов вы конечно погорячились, но многие языки обходятся совсем без встроенного типа SET, что им нисколько не мешает использовать множества как тип данных.