Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С] строки - выделение цветом символов! 
V
    Опции темы
1122
  Дата 12.1.2008, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Здравствуйте.
Есть задание: Дана сторока символов. Выделить все символы в этой строке другим цветом, не являющиеся буквами.
Проверку на "символьность" я знаю как сделать, а вот как выделить другим цветом, кажем красным.. не знаю. Подскажите пожалуйста.
Программу нужно написать на Си.

Это сообщение отредактировал(а) 1122 - 12.1.2008, 23:05
PM MAIL   Вверх
JackYF
Дата 12.1.2008, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(1122 @  12.1.2008,  21:53 Найти цитируемый пост)
Выделить все символы в этой строке другим цветом, не являющиеся буквами.

выводить цветом - где? в визуальном окне? в консоли? какая ОС? какой компилятор?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
1122
Дата 12.1.2008, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Компилятор Visual C++ (Visual Studio 2005)
В консоле. Вин ХР.
PM MAIL   Вверх
JackYF
Дата 12.1.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(1122 @  12.1.2008,  22:28 Найти цитируемый пост)
В консоле. Вин ХР. 

Тогда курить MSDN (WinAPI) на предмет функций а-ля SetConsoleТратата.

Добавлено через 15 секунд
И найти функцию, которая позволит менять цвет.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
1122
Дата 13.1.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



setConsoleTextAttribute - не это случайно?)
PM MAIL   Вверх
bsa
Дата 13.1.2008, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1122, очень похоже. Тебе видней. smile 
PM   Вверх
Dov
Дата 13.1.2008, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(1122 @  12.1.2008,  23:26 Найти цитируемый пост)
setConsoleTextAttribute - не это случайно?)


1122, поскольку тебе нужно подсветить не всю строку, а отдельные символы, то лучше использовать WriteConsoleOutputAttribute, что бы у тебя была возможность переходить по координатам и, таким образом, выделять цветом отдельный символ. 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 13.1.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Что нибудь такое, например:
Код
#include <stdio.h>
#include <windows.h> 
#include <ctype.h>

enum COLOR {BLUE = 9, GREEN, TURQUOISE, RED, VIOLET, YELLOW};

void textcolor(int x, int y, WORD color)
{
    HANDLE stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD  coord  = {x, y};

    WriteConsoleOutputAttribute(stdOut, &color , 1, coord, NULL);
}

int main()
{
    char* str = "<<< Happy new year 2008! >>>";

    printf("Result:\n%s\n", str);

    for(int i = 0; str[i]; i++)
        if(!isalpha(str[i]))
           textcolor(i, 1, RED);

    return 0;
}


Это сообщение отредактировал(а) Dov - 13.1.2008, 02:06


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
1122
  Дата 13.1.2008, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Спасибо!!!
Dov, а вы не могли бы поподробнее рассказать про аргументы WriteConsoleOutputAttribute(stdOut, &color , 1, coord, NULL);
Что они значат. особенно 3 последних =)

и вот это что?
enum COLOR {BLUE = 9, GREEN, TURQUOISE, RED, VIOLET, YELLOW};
это типа доступные цвета?)

P.s. Еще раз большое спасибо за готовый код!!!
PM MAIL   Вверх
Dov
Дата 13.1.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(1122 @  13.1.2008,  01:13 Найти цитируемый пост)
Что они значат. особенно 3 последних

Код
BOOL WriteConsoleOutputAttribute(
    HANDLE hConsoleOutput,         // дескриптор экранного буфера
    CONST WORD * lpAttribute,      // атрибуты записи
    DWORD nLength,                 // число ячеек, в которые атрибуты должны быть скопированы
    COORD dwWriteCoord,            // координаты первой ячейки
    LPDWORD lpNumberOfAttrsWritten // число фактически записанных ячеек
);

1122, вообще-то эту информацию лучше смотреть в MSDN.  
 
Цитата(1122 @  13.1.2008,  01:13 Найти цитируемый пост)
и вот это что?enum COLOR {BLUE = 9, GREEN, TURQUOISE, RED, VIOLET, YELLOW};это типа доступные цвета?)
  smile 
Да, это набор констант для выбора цвета, но ты можешь использовать стандартные:
Код

FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY 
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
 
Можно их комбинировать в разных сочетаниях. Например, нижеследующая комбинация 
Код

FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_INTENSITY

даст тебе синий текст на красном фоне.





--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
1122
Дата 13.1.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Dov, еще раз огромное спасибо!
PM MAIL   Вверх
JackYF
Дата 14.1.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(1122 @  13.1.2008,  17:26 Найти цитируемый пост)
Dov, еще раз огромное спасибо! 

вопрос решён? если да, то помечай тему решённой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
1122
Дата 15.1.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



да. Вопрос решен. Извините. Не знал, что такие правила.


M
JackYF
Это не правила, это рекомендации :)
В следующий раз решенную тему помечай галочкой (сверху или при ответе в тему)
В этот раз пометил сам.


Это сообщение отредактировал(а) JackYF - 15.1.2008, 23:01
PM MAIL   Вверх
Siscipsak
Дата 1.9.2022, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.8.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
DrawSwade
Дата 13.9.2022, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.9.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1612 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.