Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 12.04.2012
Сообщений: 34
1

Удаление повторного вхождения символа из строки

13.10.2012, 19:03. Показов 2013. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, вот собственно что требуется: Дан текстовый файл f. Записать в файл g символы файла f в обратном порядке, оставив только первые вхождения каждого символа. Вот что имеется.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program lab_9_1;               
uses crt;                   
Var f1,f2:text;                       
st,s:string;                 
i,j:integer;                                    
begin                                        
   clrscr;                               
   assign (f1,'c:/f.txt');                   
   reset(f1);
   writeln(st);                                  
   while not eof(f1) do                           
   readln(f1, st);                                
   for i:= length(st) downto 1 do       
   s:=s+st[i];                                    
 
   assign(f2, 'c:\g.txt');
   rewrite(f2);
   writeln(f2, s);
   close(f1);
   close(f2);
   readln;
end.
Программа работает и даже переворачивает строку и сохраняет всё это в файл. Но вот как сделать чтобы она ещё и удаляла повторные вхождения?

Добавлено через 2 часа 43 минуты
В общем вот код готовой проги, теперь она делает всё как в задании, только вот у меня вопрос по оформлению программы. Когда из строки удаляются повторные вхождения вместе с ними удаляются и пробелы, как их оставить, а то как-то не красиво?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program lab_9_1;
uses crt;
Var f1,f2:text;
st,s,s2:string;
i,j:integer;
b: boolean;
begin
   clrscr;
   assign (f1,'c:/f.txt');
   reset(f1);
   writeln(st);
   while not eof(f1) do
   readln(f1, st);
   for i:= length(st) downto 1 do
   s:=s+st[i];
   s2:=' ';
   for i:=length(s) downto 1 do
      begin
         if pos(s[i],s2)=0 then s2:=s2+s[i]
         else delete (s,i,1);
      end;
   assign(f2, 'c:\g.txt');
   rewrite(f2);
   writeln(f2 ,s);
   close(f1);
   close(f2);
   writeln(st);
   writeln(s);
   readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2012, 19:03
Ответы с готовыми решениями:

Ввод строки S и символа С. Результат: число повторений символа С и порядковые позиции вхождения этого символа в строку
Нужно составить программу, в которой пользователь вводит вручную строку S и символ C. Результатом...

Удаление из исходной строки повторные вхождения заданного символа
Исходная строка вводится с клавиатуры, результат выводится на экран. Написать программу,...

Удаление из исходной строки многократные вхождения заданного символа, заменяя их однократными
Программа, которая удаляет из исходной строки многократные вхождения заданного символа, заменяя их...

Обработка текста, удаление повторного вхождения слов
Помогите написать задачу на С: Задана фраза - последовательность, содержащая от 1 до 25 слов, в...

2
296 / 274 / 194
Регистрация: 03.05.2012
Сообщений: 570
16.10.2012, 19:04 2
Цитата Сообщение от Bassist Посмотреть сообщение
Когда из строки удаляются повторные вхождения вместе с ними удаляются и пробелы, как их оставить, а то как-то не красиво?
Дело в том что пробелы тоже символы и если их будет несколько,то нарушиться условие задачи.
Твоё решение можно упростить
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program lab_9_1;
 
uses crt;
 
var st,s:string;
    i:integer;
    f:text;
 
begin
  clrscr;
  assign (f,'C:\Files for Program Pascal\F.txt');
  reset(f);
  st:='';
  while not eof(f) do begin
    readln(f,s);
    st:=st+s;
  end;
  close(f);
  assign(f,'C:\Files for Program Pascal\G.txt');
  rewrite(f);
  s:='';
  for i:=length(st) downto 1 do begin
    if pos(st[i],s)=0 then
      s:=s+st[i]
  end;
  writeln(f,s);
  close(f);
end.
Но я бы применил множество символов.
1
1 / 1 / 1
Регистрация: 12.04.2012
Сообщений: 34
16.10.2012, 21:18  [ТС] 3
Цитата Сообщение от Paster Fob Посмотреть сообщение
Дело в том что пробелы тоже символы и если их будет несколько,то нарушиться условие задачи.
Твоё решение можно упростить

Но я бы применил множество символов.
Спасибо огромное, я же новичок, пишу программу и одновременно учусь, вот и нагромоздил всякого. По поводу множеств, если я их использую, то это будет прямой доступ к записям файлов? Просто в условиях значился последовательный (я просто это не писал здесь).

И у меня ещё вопрос, в другом задании мне нужно округлить числа находящиеся в файле, тут как я понимаю мне и нужны будут множества (по заданию должен быть прямой доступ)? Надеюсь не утомил вопросами.
0
16.10.2012, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2012, 21:18
Помогаю со студенческими работами здесь

Отсечь часть строки после вхождения символа/строки
string file = File.ReadAstring _file = File.ReadAllLines(_fileName); Такое вхождение...

Проверка вхождения символа строки во множество.
Подскажите, пожалуйста. Как мне проверить входит ли символ строки в множество определенных...

Удалить из строки все вхождения заданного символа
Здравствуйте, Форумчане! У меня с++ кобенится String ^s3=".", ^s4; name->Replace(s3,s4); ...

Удалить из строки все вхождения заданного символа
Всем привет) Есть программа, которая не совсем корректно работает. Суть ее в том ,что из консоли мы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru