18.12.2013, 21:27 | #1 (permalink) |
Member
Регистрация: 15.12.2013
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 114
|
Найти ошибку в программе
Помогите найти ошибку в программе, пожалуйста! Задание - в прикрепленном файле. Код:
12.12.2013 Проверка д/з (от 05.12.2013): 7 задач/программ д/з Многострочный редактор TxtEdt (ликвидация ошибок пунктуации) | На входе строка, содержащая буквы и символы пунктуации (из первой половины ASCII). | Задача: удалить "лишние" символы пунктуации и добавить недостающие пробелы: | * слово = фрагмент строки, состоящиЙ из букв, | * после символа пунктуации должен быть 1 пробел или конец строки, | * после 'слова' может быть только 1 символ пунктуации или пробел или конец строки, | * первому слову строки не должны предшествовать не-буквы. | Редактирование строки выполняется за счет вызова подпрограмм, ликвидирующих однотипные "ошибки". | Ввод из входного текстового файла <имя1>.txt (несколько строк-тестов). | Вывод конечного результата построчно в текстовый файл <имя2>.txt. | Пример: | , ;ВАСЯ,, .ПЕТЯ , , ... => ВАСЯ, ПЕТЯ, ... д/з Упрощенный вариант: редактор строки StrEdt {-1 балл} | Из текстового файла <имя1>.txt вводится строка. | Вывод результирующей строки в текстовый файл <имя2>.txt. PHP код:
|
18.12.2013, 21:27 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Можете найти полезную информацию в похожих обсуждениях Найти ошибку Помогите найти ошибку в программе на Си Строки. Не могу найти ошибку в программе |
18.12.2013, 23:53 | #2 (permalink) |
Member
Регистрация: 15.12.2013
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 114
|
PHP код:
|
19.12.2013, 12:12 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Пожалуйста. Вот, отладил. Вроде работает. Пояснение: булевский флажок "b" поставлен для подстраховки: цикл перебора функций продолжается до тех пор, пока строка не перестанет изменяться. Но не уверен в его необходимости: вроде бы и без него получается, но, может быть, просто я не нашел комбинации символов, где бы он "сработал".
Код:
var S:string; f1,f2:text; b:boolean; function Lit(C:Char):boolean; begin Lit:=((ord(C)>64) and (ord(C)<91)) or ((ord(C)>96) and (ord(C)<123)); end; function BeginOfLine(S:string):string; var O:string; begin O:=S; while not(Lit(O[1])) do begin delete(O,1,1); b:=false; end; BeginOfLine:=O; end; function DelProbBefCh(S:string):string; var P:string; i:integer; begin P:=S; i:=1; repeat if (P[i]=' ') and (P[i+1]=' ') then begin delete(P,i+1,1); b:=false; end else i:=i+1; until i=length(P)-1; DelProbBefCh:=P; end; function DelNextSimb(S:string):string; var N:string; i:integer; begin i:=1; N:=S; while i<=(length(N)-1) do begin if Not(Lit(N[i])) and Not(Lit(N[i+1])) and (N[i+1]<>' ') then begin delete(N,i+1,1); b:=false; end else i:=i+1; end; DelNextSimb:=N; end; function InsProb(S:string):string; var M:string; i:integer; begin M:=S; i:=1; repeat if Not(Lit(M[i])) and (M[i]<>' ') and Lit(M[i+1]) then begin insert(' ',M,i+1); b:=false; i:=i+1; end; i:=i+1; until i=length(M)-1; InsProb:=M; end; begin assign(f1, 'Input.txt'); reset(f1); assign(f2, 'Output.txt'); rewrite(f2); while not eof(f1) do begin readln(f1,S); repeat b:=true; S:=BeginOfLine(S); S:=DelProbBefCh(S); S:=DelNextSimb(S); S:=InsProb(S); until b; writeln(f2,S); end; close(f1); close(f2); end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|