Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 645
от 22.01.2007, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 451, Экспертов: 60
В номере:Вопросов: 6, Ответов: 15


Вопрос № 71279: Здравствуйте, уважаемые эксперты. Пытаюсь научится программировать в С++Builder 6. Подскажите, пожалуйста, как в TMemo задать разные строки разными шрифтами с разным цветом. С уважением, Владимир...
Вопрос № 71315: Уважаемые эксперты. Помогите, пожалуйста, решить вот такое задание: Создать абстрактный класс, имеющий не более 2-х свойств и методов (должна быть виртуальная функция), породить от него 2-х потомков, имеющих не более 2-х свойств и методов. Проилл...
Вопрос № 71316: У меня в файле записаны пути к файлам типа: D:video1matrix.avi D:music irvana ape me.mp3 и т.д. Мне нужно считать их и инициализировать типа f=fopen(str,"r"); str[]=" D:video1matrix.avi" Но при считыва...
Вопрос № 71324: Здравствуйте, эксперты. Есть кусок кода (см. приложение), набор телефонного номера модемом. Все работает нормально. То есть, когда жму на кнопку On модем набирает номер, а на кнопку Off – отключается. Но вот в чем проблема – если после нажатия на...
Вопрос № 71333: Как мне вывести слово целиком в котором я нашел вхождение подстроки функцией strstr(); Например я ввожу строку Internationsl Groups System, а строка для поиска roup. Как мне вывести слово Groups?. Можна любые другие методы....
Вопрос № 71343: Как узнать входит ли подстрока str2 в строку str1, и вывести слово в котором она находится? Слова розделены пробелами....

Вопрос № 71.279
Здравствуйте, уважаемые эксперты.

Пытаюсь научится программировать в С++Builder 6. Подскажите, пожалуйста, как в TMemo задать разные строки разными шрифтами с разным цветом.

С уважением,
Владимир
Отправлен: 17.01.2007, 01:20
Вопрос задал: Volodymyr (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jadd
Здравствуйте, Volodymyr!
В TMemo никак. В TRichEdit это можно сделать. Или придется писать свою компоненту.

Успехов.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 17.01.2007, 01:23
Оценка за ответ: 3
Комментарий оценки:
В TRichEdit я такой возможности не нашел. Я поставил бы бал выше за подсказку в каких Properties искать.

Отвечает: Lemeshev Konstantin
Здравствуйте, Volodymyr!
Например можно сделать так. Получим в компоненте RichEdit1 строки разного цвета.

RichEdit1->SelAttributes->Color=clBlue;
RichEdit1->Lines->Add("blue");
RichEdit1->SelAttributes->Color=clRed;
RichEdit1->Lines->Add("red");
Ответ отправил: Lemeshev Konstantin (статус: 3-ий класс)
Ответ отправлен: 17.01.2007, 06:10
Оценка за ответ: 5
Комментарий оценки:
Спасибо за полный ответ, помогло.


Вопрос № 71.315
Уважаемые эксперты. Помогите, пожалуйста, решить вот такое задание:
Создать абстрактный класс, имеющий не более 2-х свойств и методов (должна быть виртуальная функция), породить от него 2-х потомков, имеющих не более 2-х свойств и методов. Проиллюстрировать работу этих классов и вызов виртуальной функции
Комментарий: одна фигура порождает другую
Отправлен: 17.01.2007, 10:46
Вопрос задала: Журавлева Галина (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Alisia02!
Вот типичный пример вызова виртуальной функции абстрактного класса на примере классов shape(абстрактный класс фигуры), и конкретных фигур circle и rect.

Приложение:

Ответ отправил: Терсков Сергей (статус: 5-ый класс)
Ответ отправлен: 17.01.2007, 11:09


Вопрос № 71.316
У меня в файле записаны пути к файлам типа:
D:video1matrix.avi
D:music irvana ape me.mp3 и т.д.
Мне нужно считать их и инициализировать типа f=fopen(str,"r"); str[]="
D:video1matrix.avi"
Но при считывании получается "D:video1matrix.avi|"
Как убрать эту палку в конце?
С файла считываю так:
fgets(str,255,r);
in=fopen(str,"r");
Может есть другой вариант?
Отправлен: 17.01.2007, 10:47
Вопрос задал: Костенко Игорь Викторович (статус: 1-ый класс)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Костенко Игорь Викторович!

Просто вместе с названием файла считывается символ конца строки. Убрать его можно по-разному, например так:

Приложение:

Ответ отправил: Physicist (статус: Практикант)
Ответ отправлен: 17.01.2007, 11:00
Оценка за ответ: 4

Отвечает: Lemeshev Konstantin
Здравствуйте, Костенко Игорь Викторович!
Краткая выдержка из хелпа по функции fgets (см. приложения) говорит о том, что она считывает строку вместе с сиволом перевода строки (который как раз и показываеться как "палка"). Следовательно нужно проверить перенесся ли этот символ из файла, и если да то удалить (на сколько я знаю, если строка последняя в файле, то символ перевода строки не появляеться) отфильтровать можно так

str // - переменная с именем файла, считаная из файла :-)

if(str[strlen(str)-2]==13)
str[strlen(str)-2]=0;
Сразу оговорюсь, что писано на коленке. :-(

Приложение:

Ответ отправил: Lemeshev Konstantin (статус: 3-ий класс)
Ответ отправлен: 17.01.2007, 11:07
Оценка за ответ: 5

Отвечает: Tek
Здравствуйте, Костенко Игорь Викторович!
Дело в том что в строку считывает символ с кодом 10 - EOL - конец строки - это и есть эта палка вероятно.
Лучше всего будет сделать после считывания так:
str[strlen(str)-2] = 0; таким образом вы завершите строку нулевым символом как и требует стандарт С. Далее все должно быть нормально.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 7-ой класс)
Ответ отправлен: 17.01.2007, 11:13
Оценка за ответ: 5

Отвечает: dentist
Здравствуйте, Костенко Игорь Викторович!
имхо оптимально и без нюансов:
strrchr(str, ' ')[0] = 0;
---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 8-ой класс)
Ответ отправлен: 17.01.2007, 11:50

Отвечает: Bob Johnson
Здравствуйте, Костенко Игорь Викторович!
2 dentist - а если strrchr не найдет символа , тогда вернет null и будет application error.
а поскольку файлы бывают с разными разделителями строк (есть 10, есть 13 + 10), я бы сделал так:
int l = strlen (str);
while (--l >= 0 && (str [l] == 10 || str [l] == 13))
str [l] = 0;
Ответ отправил: Bob Johnson (статус: Академик)
Россия, Калуга
WWW: Программирование
----
Ответ отправлен: 17.01.2007, 11:59
Оценка за ответ: 4


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

Приложение:

Отправлен: 17.01.2007, 11:41
Вопрос задал: Кохан Владимир Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tek
Здравствуйте, Кохан Владимир Иванович!
В методе OffClick следует в вашем случае после CloseHandle(H); ставить H = NULL;
Так как в OnClick вы проверяете if (!H) и создаете подключение к порту а десккриптор H после первого соединения - уде не NULL - и подключение заново не создается.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 7-ой класс)
Ответ отправлен: 17.01.2007, 11:52
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо, все работает отлично!


Вопрос № 71.333
Как мне вывести слово целиком в котором я нашел вхождение подстроки функцией strstr();
Например я ввожу строку Internationsl Groups System, а строка для поиска roup. Как мне вывести слово Groups?.
Можна любые другие методы.
Отправлен: 17.01.2007, 12:49
Вопрос задал: Костенко Игорь Викторович (статус: 1-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lemeshev Konstantin
Здравствуйте, Костенко Игорь Викторович!
Для реализации использовал ваш пример "Например я ввожу строку Internationsl Groups System, а строка для поиска roup."
В переменно t будет содержаться слово "Groups".

Замечания:

1. Что бы упростить код не использовал динамическую память (char t[100];)
2. Предполагаеться что слова разделены только пробелами, думаю понятно чем нужно дополнить код, чтобы использовать другие разделители (дополнить услови в while)

Приложение:

Ответ отправил: Lemeshev Konstantin (статус: 3-ий класс)
Ответ отправлен: 17.01.2007, 13:20

Отвечает: Santana
Здравствуйте, Костенко Игорь Викторович!

предлагаю другой вариант, рубим по пробелам и ищем в каждом слове входение

char input[] = "Internationsl Groups System";
char find[] = "roup";

char *p;

p = strtok(input, " ");

while (p)
{
if (strstr(p, find))
{
// то что надо
};
p = strtok(NULL, " ");
};


ЗЫ это гипотетически. те на практике не проверял
Ответ отправил: Santana (статус: 9-ый класс)
Ответ отправлен: 17.01.2007, 13:36
Оценка за ответ: 5
Комментарий оценки:
Спасибо, на практике как раз то что нужно.

Отвечает: dentist
Здравствуйте, Костенко Игорь Викторович!

удобней сначала разбить строку на "слова" и уже среди них искать.
Не забываем, что пробел это разделитель который не должен встречаться в искомой строке!

вот набросал на скорую руку: <<см. приложение>>

Приложение:

---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds

Ответ отправил: dentist (статус: 8-ой класс)
Ответ отправлен: 17.01.2007, 15:00
Оценка за ответ: 4

Отвечает: kool
Здравствуйте, Костенко Игорь Викторович!
Так вот и ищи после нахождения этого вхождения первый пробел справа
и слева от него (вхождения). Это и будет начало и конец твоего слова.
Для обратного поиска символа используй ф-цию strrchr для прямого strchr.
Удачи!

Ответ отправил: kool (статус: 5-ый класс)
Ответ отправлен: 17.01.2007, 23:02


Вопрос № 71.343
Как узнать входит ли подстрока str2 в строку str1, и вывести слово в котором она находится? Слова розделены пробелами.
Отправлен: 17.01.2007, 13:26
Вопрос задал: Костенко Игорь Викторович (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lemeshev Konstantin
Здравствуйте, Костенко Игорь Викторович!
Аналогичная проблема в вопросе 71333.
Ответ отправил: Lemeshev Konstantin (статус: 3-ий класс)
Ответ отправлен: 17.01.2007, 13:58

Отвечает: kool
Здравствуйте, Костенко Игорь Викторович!
Так вот и ищи после нахождения этого вхождения первый пробел справа
и слева от него (вхождения). Это и будет начало и конец твоего слова.
Для обратного поиска символа используй ф-цию strrchr для прямого strchr.
Удачи!
Ответ отправил: kool (статус: 5-ый класс)
Ответ отправлен: 17.01.2007, 23:02


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.41 beta от 19.01.2007
Яндекс Rambler's Top100

В избранное