21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
1

Заменить в тексте слова, заключенные в ковычки порядковым номером!

14.06.2010, 13:55. Показов 2755. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста задачку, она звучит так!
Заменить в текстовом файле все слова, заключенные в ковычки, порядковым номером!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program z1;
var
i,n:integer;
st:string;
f:text;
begin
assign(f,14ish.pas');
reset(f)
readln(f,st);
i:=length(st);
while i>1 do if st[i]='"' then begin
n:=i;
while(st[n]<>'"') and (n<=lenghth(st)) do n:=n+1;
delete(st,i+1,n-i-1);
i:=i-1;
end else i:=i+1;
writeln(st);
readln;
end.
Но у меня она циклится!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2010, 13:55
Ответы с готовыми решениями:

Заменить в тексте все слова, заключенные в кавычки, порядковым номером
Добрый день!Есть такая задачка, она звучит так: Заменить в тексте все слова, заключенные в...

В тексте каждую букву заменить ее порядковым номером в алфавите
В тексте каждую букву заменить ее порядковым номером в алфавите . При выводе в одной строке...

В английском тексте каждую букву заменить ее порядковым номером в алфавите
В английском тексте каждую букву заменить ее порядковым номером в алфавите . При выводе в одной...

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

26
Платежеспособный зверь
8940 / 4368 / 1644
Регистрация: 28.10.2009
Сообщений: 11,590
14.06.2010, 14:00 2
кавычку забыли поставить
Pascal
1
assign(f,'14ish.pas');
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 16:25  [ТС] 3
Цитата Сообщение от кот Бегемот Посмотреть сообщение
кавычку забыли поставить
Pascal
1
assign(f,'14ish.pas');
Это я уже исправил, я в задаче только сделал, чтобы удалялись все символы, которые находятся в кавычках...а надо заменить эти слова порядковым номеров, кто знает как это сделать?
0
Добры_Змейка
53 / 53 / 43
Регистрация: 09.06.2010
Сообщений: 170
14.06.2010, 16:35 4
есть такая функция - Ord();
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 16:49  [ТС] 5
Цитата Сообщение от isqoff Посмотреть сообщение
есть такая функция - Ord();
Ну да, она возвращает код символа!То есть толкьо я не знаю, как ее прописать в самой строке, чтобы он заменял слова на их номер!
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 17:04  [ТС] 6
Цитата Сообщение от sergei3ru Посмотреть сообщение
Ну да, она возвращает код символа!То есть толкьо я не знаю, как ее прописать в самой строке, чтобы он заменял слова на их номер!
Мы должны найти в строке знак ковычки, потом подсчитать количесвто символов до другойковычки, эти символы удалить, а в скобках прописать их номер!Я правильно мыслю?
0
Платежеспособный зверь
8940 / 4368 / 1644
Регистрация: 28.10.2009
Сообщений: 11,590
14.06.2010, 17:32 7
Цитата Сообщение от sergei3ru Посмотреть сообщение
Подскажите, пожалуйста задачку, она звучит так!
Заменить в текстовом файле все слова, заключенные в ковычки, порядковым номером!
Порядковым номером чего? Если номером слова, то разбиваем предложение на слова, занеся слова в массив, проходим по массиву, если первый и последний символ слова - кавычки, то вместо слова в массив заносим строковое представление номера элемента массива. Так я себе вижу решение этой задачи.
1
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 17:57  [ТС] 8
Цитата Сообщение от кот Бегемот Посмотреть сообщение
Порядковым номером чего? Если номером слова, то разбиваем предложение на слова, занеся слова в массив, проходим по массиву, если первый и последний символ слова - кавычки, то вместо слова в массив заносим строковое представление номера элемента массива. Так я себе вижу решение этой задачи.
Аха, начнем сначала, то есть сперва мы рабиваем всю строку на слова и заносим их в массив!
Вот примерно так?
Pascal
1
2
3
st:=' '+st;
for i:=1 to length(st) do
if st[i]=' ' then k:=k+1 else a[k]:=a[k]+st[i];
Вот эту строчку надо писать st:=' '+st;?
0
Платежеспособный зверь
8940 / 4368 / 1644
Регистрация: 28.10.2009
Сообщений: 11,590
14.06.2010, 17:59 9
надо, надо, или, если пробел не добавлять, то сразу счётчик с 1 начинать
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 18:02  [ТС] 10
Цитата Сообщение от кот Бегемот Посмотреть сообщение
надо, надо, или, если пробел не добавлять, то сразу счётчик с 1 начинать
Значит, если проьел не ставить, то первоначально присвоить k:=1, а не нулю, да?

Добавлено через 29 секунд
Цитата Сообщение от кот Бегемот Посмотреть сообщение
надо, надо, или, если пробел не добавлять, то сразу счётчик с 1 начинать
Значит, если пробел не ставить, то первоначально присвоить k:=1, а не нулю, да?
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 18:23  [ТС] 11
работает, колличество слов он мне показывает, это как раз и будет порядковый номер слова, да?
Теперь находим в массиве знак ковычки, типа так
for i:=1 to a[k] do if a[i]='"' then...
и что тогда, как мы запишем в массив номера этих слов?
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.06.2010, 19:09 12
Вот примерно так.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses crt;
var f,g:text;
    i,k:byte;
    nf,ng,s,s1:string;
begin
clrscr;
write('Имя файла для чтения: ');
readln(nf);
nf:=nf+'.txt';
assign(f,nf);
{$I-} reset(f);  {$I+}
if IOResult <> 0 then
 begin
  writeLn('Файл ',nf,' не найден!');
  writeLn('Работа программы завершена. Нажмите ENTER');
  readln;
  exit;
 end;
write('Имя файла для записи: ');
readln(ng);
ng:=ng+'.txt';
assign(g,ng);
rewrite(g);
while not eof(f) do
 begin
  readln(f,s);
  k:=0;
  i:=1;
  while i<=length(s) do
  if s[i]='"' then{если кавычка}
   begin
    k:=k+1;{считаем}
    i:=i+1;{шаг вперед}
    str(k,s1);{преобразуем номер в строку}
    insert(s1,s,i);{вставляем за кавычкой}
    i:=i+length(s1);{перепрыгиваем через номер}
    while s[i]<>'"' do{пока не следующая кавычка}
    delete(s,i,1);{удаляем}
    i:=i+1;{перепрыгиваем через кавычку}
   end
  else i:=i+1;{иначе вперед}
  writeln(g,s);{пишем измененную строку в новый файл}
 end;
close(f);
close(g);
write('Файл ',nf,' переписан в файл ',ng);
readln
end.
1 раз протестировал, вроде вышло
Исходная строка
tttt"aaa"oooo"ppppp"
результат
tttt"1"oooo"2"
1
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 19:17  [ТС] 13
Спасибо огромное, если я спрошу немного про код задачи не затруднит ответить?
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.06.2010, 19:19 14
Спрашивай, хотя я почти все написал, а вопросы типа что такое begin, reset, writeln не принимаются.
1
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 19:21  [ТС] 15
Цитата Сообщение от Puporev Посмотреть сообщение
Спрашивай, хотя я почти все написал, а вопросы типа что такое begin, reset, writeln не принимаются.
Ну это понятно, сейчас поглядим!
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 19:43  [ТС] 16
А если ее немного сократить и не записывать результат в другой файл, а просто оставить его в этом файле, а потом выводить строку s!Типа так
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
31
program z1;
uses crt;
var f,g:text;
    i,k:byte;
    nf,ng,s,s1:string;
begin
clrscr;
assign(f,'14ish.pas');
reset(f);
while not eof(f) do
 begin
  readln(f,s);
  k:=0;
  i:=1;
  while i<=length(s) do
  if s[i]='"' then
   begin
    k:=k+1;
    i:=i+1;
    str(k,s1);
    insert(s1,s,i);
    i:=i+length(s1);
    while s[i]<>'"' do
    delete(s,i,1);
    i:=i+1;
   end
  else i:=i+1; close(f);  end;
 
write(s);
readln
end.
Но мне он говорит, что файл не открыт для записи, хотя вроде я тут ничего не записываю в исходный файл, что мне исправить, подскажите, пожалуйста!
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.06.2010, 19:48 17
Так мозг включать нужно. Еще строку до конца не дочитал, а файл уже закрыл.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while not eof(f) do
 begin
  readln(f,s);
  k:=0;
  i:=1;
  while i<=length(s) do
  if s[i]='"' then
   begin
    k:=k+1;
    i:=i+1;
    str(k,s1);
    insert(s1,s,i);
    i:=i+length(s1);
    while s[i]<>'"' do
    delete(s,i,1);
    i:=i+1;
   end
  else i:=i+1;
  writeln(s);
 end; 
close(f);
readln
end.
Кстати переписать файл это условие задачи.
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 20:01  [ТС] 18
Цитата Сообщение от Puporev Посмотреть сообщение
Так мозг включать нужно. Еще строку до конца не дочитал, а файл уже закрыл.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while not eof(f) do
 begin
  readln(f,s);
  k:=0;
  i:=1;
  while i<=length(s) do
  if s[i]='"' then
   begin
    k:=k+1;
    i:=i+1;
    str(k,s1);
    insert(s1,s,i);
    i:=i+length(s1);
    while s[i]<>'"' do
    delete(s,i,1);
    i:=i+1;
   end
  else i:=i+1;
  writeln(s);
 end; 
close(f);
readln
end.
Кстати переписать файл это условие задачи.
Уж извините, просто целый день парюсь с этими задачами, осталась последняя, ее добить и все!

Добавлено через 2 минуты
Все вроде работает!Но вот только один ньюанс, если слов в кавычках несколько он все равно показывает одно число, а так-то должен показвать порядковый номер всех слов, которые находятся в этих ковычках, возможно что-нибудь там подредактировать?
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.06.2010, 20:05 19
Не понял, я же привел пример как программа работает
Исходная строка
tttt"aaa"oooo"ppppp"
результат
tttt"1"oooo"2"
2 слова в кавычках, 2 и показывает.
0
21 / 18 / 4
Регистрация: 07.04.2010
Сообщений: 806
14.06.2010, 20:09  [ТС] 20
Цитата Сообщение от Puporev Посмотреть сообщение
Не понял, я же привел пример как программа работает
Исходная строка
tttt"aaa"oooo"ppppp"
результат
tttt"1"oooo"2"
2 слова в кавычках, 2 и показывает.
Может тогда я чего не понимаю!Пишу задачу, как она есть в словах!
Заменить в тексте все слова, заключенные в ковычки, порядковым номером!

Если исходная строка такая tttt"aaa"oooo"ppppp"
то типа должно получиться tttt"2"oooo"4"
в соотвествии с порядковым номером слова во всей строке!Или с порядковым номером слова именно в ковычках!Как легче сделать?
0
14.06.2010, 20:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2010, 20:09
Помогаю со студенческими работами здесь

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

Замена букв в тексте порядковым номером
В тексте каждую букву заменить ее номером в алфавите

Точки заменить их порядковым номером
Задание звучит так: заменить все точки цифрами, с соответствующими им номерами. Написал этот код....

Элементы с четным порядковым номером заменить на 02
Массив из восьми элементов. Элементы с четным порядковым номером заменить на 02. Помогите кому...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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