![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Гениальный123Робот |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 2.1.2006 Репутация: нет Всего: нет |
В одном файле дан исходный текст программы на языке С, в другом – словарь ключевых слов этого языка. (33 слова)Преобразовать текст, записав все ключевые слова прописными буквами, а остальные конструкции (идентификаторы и т.д.) – строчными.
Си |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Не уверен, что это чистый С, но работает.
Это сообщение отредактировал(а) alexeis1 - 12.12.2006, 15:17 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Гениальный123Робот |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 2.1.2006 Репутация: нет Всего: нет |
Очень благодарен. Дай пожму твою руку! Выручил. Только еще попрошу чуток пояснить хотя бы ключевые моменты: 1. Строка 1 - что это за инклюд? Для чего?... Точнее что конкретно в нем содержится важного для нас. 2. Ну и сам алгоритм: 25 - 32 строки Остальное вроде все понятно. Кстати, красивое решение. Простое. Даже я почти все понял СПАСИБО Это сообщение отредактировал(а) Гениальный123Робот - 12.12.2006, 19:21 |
|||
|
||||
| Alexeis |
|
||||||||||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Это специальный заголовок в Visual C++ в данном случае он вообще пустой, но обычно требуется компилятором.
читаем очередную строку из фала до маркера конца строки, формат "%[^\n]s" говорит что в строку включаются все символы кроме символа конца строки. Когда достигаем конца строки результат функции равен EOF. getc(f1); - считывает из файла сам маркер конца строки.
Ну что ощутили прелести программирования на паскале f1=fopen("test.cpp", "r"); - assign(f1, 'test.cpp');reset(f); f2 = fopen("result.cpp", "w");- assign(f2, 'test.cpp'); rewrite(f); fscanf(f1, "%[^\n]s", str); getc(f1); - Readln(f1, s); fprintf(f2, "%s\n", str); - Writeln(f2, s); aword = strstr(str, words[i]); - pos(words[i], str); aword[j] = toupper(aword[j]); - aword[j] := upCase(aword[j]); -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||||||||
|
|||||||||||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
alexeis1, работать будет, но неправильно. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Dov, Ну если быть до конца строгим, то задача намного сложнее, я делал подсветку синтаксиса, и знаю, что это такое и знаю, что по хорошему тут без регулярных выражений не обойтись.
Скажем тот же while может быть таким while (), а может таким while() или case : case: или case:while() или i = 5; continue или i = 5;continue, кроме того разделителем может выступать не пробел а знак табуляции. Текст в комментариях не типа // или /**/ не является ни идентификатором ни ключевым словом, а также текст в строках и а в строках еще могут встречаться кавычки которые могут означать конец строки а могут просто быть частью текста, аналогично и с комментами, в них могут содержаться другие комменты, а знак типа коммента может попадать еще и в строку (просто так), а есть текст еще и содержит ошибки так вообще усложняется т.д. и т.п. на врядли это все имелось ввиду когда просили сделать учебный пример. Нормально решенная задача может элементарно вырасти до 1000 строк и более. Желаете? Пишите. У меня на решение задачи подсветки синтаксиса ушел не один день! -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Не блин
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
alexeis1, чего ты так кипятишься? Здесь речь не о подсветке синтаксиса, а о том, что ф-ция strstr() не корректно находит ключевые слова. Как этого избежать? Если тебе это интересно, то можешь посмотреть эту тему.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Dov, хорошо допустим этот баг исправим, но тогда все равно программа будет на это
давать вот это
Потому я и говорю, что для полноценного решения нужно много чего делать и разбор будет практически такой же как и у подсветки синтаксиса. Решать такую задачу далеко не просто, потому я и возмущаюсь. Усложнять ее можно сколько угодно. Пишите свое решение, я же не запрещал. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 25 Всего: 30 |
прожка посложновастей.
сроку -> char *words[33] = {"auto","break", преобразует -> CHAR *words[33] = {"AUTO","BREAK", но в этой строке оставляет в покое -> int -> CHAR *c = "inti";
|
|||
|
||||
| Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 50 Всего: 88 |
Ладно, alexeis1, попробую объяснить тебе это по-другому. Просто ты путаешь подсветку синтаксиса(реальную задачу) с простой учебной программой. В этой программе отделение (якобы) ключевых слов какого-то языка от (якобы) идентификаторов - это чистая условность, придуманная каким-то преподом. Вот представь себе, что препод переформулировал задачу и теперь она звучит так.
(пишу это просто для наглядности)
Так вот. Если где-то в тексте встретится такое: "Робеспьер и сыновья." (спокойно, это для примера) или там встретится кто-то с фамилией, скажем, андрейченко, то сам понимаешь... Пощады от препода не жди. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
| Гениальный123Робот |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 2.1.2006 Репутация: нет Всего: нет |
alexeis1 ,
1. Unable to open include file 'STDAFX.H'. 2. В строке 44 ошибка о двух нигде не использующихся параметрах (argc и argv). Я конечно понимаю, можно их убрать, но не пострадает ли программа...? 3. Чего у тебя нет #include <stdio.h> в программе? Забыл, наверное, увлекшись ;) Олег4, спасибо, сейчас протестю твое детище... ;) |
|||
|
||||
| Гениальный123Робот |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 2.1.2006 Репутация: нет Всего: нет |
Олег, слушай, а как там точно адрес файлов прописать? Вот так, как ты написал, это подразумевает какой-то адрес? Может в том же каталоге...?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 23 Всего: 459 |
Гениальный123Робот, я в сях плохо разбираюсь, компилил в Visual C++, там этот код откомпилировался без ошибок...
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Oleg_Ci |
|
|||
![]() Friend ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 25 Всего: 30 |
Гениальный123Робот, файлы должны-быть в томже коталоге где и сама программа ( или исходники )
Вообще-то программа открывает один файл в котором находится тескт на языке 'C', и второй создаёт для записи туда результата, а ключевые слова программа НЕЧИТАЕТ из файла, а берёт из массива - char *words[33], который alexeis1, изобрёл. Такие-вот дела... |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |