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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение цвета текста 
V
    Опции темы
mossad
Дата 3.1.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток, уважаемые Программисты.
есть проблемка.

Точная формулировка:

Написать программу, осуществляющую  поиск  образца  в  текстовых  строках.

Описание:

Вводится последовательность не более 5 строк длиной не более 67 символов. Окончание входного текста - ввод строки,
начинающейся  символом ";".  После  этого  вводится строка-образец для поиска в тексте. 
Затем осуществляется обработка - поиск образца в строках текста.
При  этом на экран выводится очередная строка текста для поиска, 
в случае неудачи поиска - на следующей строке сообщение об этом, начинающееся  с  символов  "*****".
В случае успеха найденный в строке текста образец закрашивается другим цветом и пользователь 
запрашивается  о продолжении поиска в той же строке или переходе к  поиску  в  следующей  строке  текста. 
Указанная   процедура повторяется для всех строк текста.

УКАЗАНИЯ: 

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


Текущее состоянее кода:

Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{
    char ch,
    answer, *p;
    char str[5][67] = {'\0'},
    search_str[67] = {'\0'};
    unsigned  str_n = 0,
    symbol_n = 0;
    unsigned int i = 0, k = 0, n = 0;



    printf("%s\n", "Введите текст:");

    while ( str_n < 5 )
    {
        ch = getchar();
    if( symbol_n == 0 && ch == ';' ) break;
    str[ str_n ] [ symbol_n++ ] = ch;
    if( ch == '\n') { ++str_n; symbol_n = 0; }
    if( symbol_n > 66 ) { printf ( "error: Слишком много строк.\n" ); exit(1); }
    }

    symbol_n = 0;
    fflush(stdin);
    printf("%s\n", "Введите искомое слово:");

    for(;;)
    {
        ch = getchar();
    if( ch == '\n') break;
    search_str [ symbol_n++ ] = ch;
    if ( symbol_n > 66 ) { printf ("error: Слишком много символов в строке.\n"); exit(1); }
    }

    if ( !strlen(search_str ) ) { printf ( "error: Текст для поиска пуст!") ; exit(1);};


    printf("\n========================================================\n");
    for ( n = 0; n < str_n; n++ )
    {
    printf ( "%s%d: %s", "string ", n+1, str[n] );
        p = str[n];

        while(*p)
        {
        if( (p = strstr(p, search_str) ) != NULL )
            {
        for ( i = 0; i < strlen(str[n]); i++ )
                {
            if ( & ( str[n][i] ) == p)
                    {

            for( k = 0; k < strlen ( search_str ); k++) printf("%c", str[n][i++]);
                        --i;
                    }
                    else
                    {
                        printf("%c", str[n][i]);
                    }
                }

                label:
                    printf("Продолжить поиск[y/n]?: ");

            fflush(stdin);
            answer = getchar();
            if ( answer == 'y') p += (strlen(search_str));
            else if ( answer == 'n') break;
                else goto label;

             }
             else
             {

        ;
        printf("*****Слово не найдено")
             }
        }
    }

    system("pause");
    return 0;
}



подскажите что нужно подправить чтобы менялся цвет искомого слова?? и вообще что не мешало бы подправить.

Заранее спасибо.


PM MAIL   Вверх
taiven
Дата 3.1.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот для борландовского компилятора:
Код

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main()
{
    char ch, answer, *p;
    char str[5][67] = {'\0'},  search_str[67] = {'\0'};
    unsigned int str_n = 0, symbol_n = 0;
    unsigned int i = 0, k = 0, n = 0;
    textcolor(7);
    //--------------------------------------------------
    cprintf("%s\n\r", "Input text:");
    while(str_n < 5)
    {
        ch = getchar();
        if(symbol_n == 0 && ch == ';') break;
        str[str_n][symbol_n++] = ch;
        if(ch == '\n'){ ++str_n; symbol_n = 0; }
        if(symbol_n > 66) { cprintf("error: too many characters in string."); exit(1); }
    }
    //-------------------------------------------
    symbol_n = 0;
    fflush(stdin);
    cprintf("%s\n\r", "Input substring to search:");
    for(;;)
    {
        ch = getchar();
        if(ch == '\n') break;
        search_str[symbol_n++] = ch;
        if(symbol_n > 66) { printf("error: too many characters in string.\n"); exit(1); }
    }
    if(!strlen(search_str)){ printf("error: substring to search is empty!"); exit(1);};

    //--------------------------------------------------------------
    cprintf("\n========================================================\n");
    for(n = 0; n < str_n; n++)
    {
        textcolor(10);
        cprintf("\r\n%s%d: %s", "string ", n+1, str[n]);
        p = str[n];
        cprintf("\r");
        while(*p)
        {
            if((p = strstr(p, search_str)) != NULL)
            {
                for(i = 0; i < strlen(str[n]); i++)
                {
                    if(&(str[n][i]) == p)
                    {
                    textcolor(14);
                    for(k = 0; k < strlen(search_str); k++) cprintf("%c", str[n][i++]);
                    --i;
                    }
                    else
                    {
                       textcolor(7);
                       cprintf("%c", str[n][i]);
                    }
                }
                label:
                    cprintf("\rContinue search in this string[y/n]: ");
                    fflush(stdin);
                    answer = tolower(getchar());
                    if(answer == 'y') p += (strlen(search_str));
                    else if(answer == 'n') break;
                else goto label;

             }
             else
             {
                textcolor(7);
                cprintf("*****Substring not found.");
                break;
             }
        }
    }
    return 0;
}



Это сообщение отредактировал(а) taiven - 3.1.2009, 23:44
PM   Вверх
mossad
Дата 4.1.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасиб большое, то что нужно)))
PM MAIL   Вверх
mossad
Дата 5.1.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



еще такой вопросик. А как сделать, чтобы прога принимала 67 символов и останавливалась, не давая ввести больше?? а то сейчас принимает 67 и  половину следующей строки. Заранее спасибо.
PM MAIL   Вверх
mossad
Дата 13.1.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребят у мя такая проблема с представленной выше прогой. Она делает то что надо, напишите плиз замену стандартного ввода/вывода на консольный. И что тут стоит подправить вообще. чтобы выглядела прилично??
PM MAIL   Вверх
bsa
Дата 13.1.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mossad @ 13.1.2009,  14:48)
Ребят у мя такая проблема с представленной выше прогой. Она делает то что надо, напишите плиз замену стандартного ввода/вывода на консольный. И что тут стоит подправить вообще. чтобы выглядела прилично??

В чем разница между "стандартным" и "консольным" по-твоему?
Если не секрет, почему ты не пользуешься fgets() и scanf() для чтения строки?

Почитай правила оформления кода.
PM   Вверх
mossad
Дата 13.1.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



(( потому что не знаю как)) что тут лучше поправить??
PM MAIL   Вверх
mossad
Дата 14.1.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как  выглядит многофайловая реализая ( prj-файл)???
 
PM MAIL   Вверх
bsa
Дата 14.1.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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




M
bsa
Если ответ по указанной в заглавии теме получен, то помечай ее решенной
И пожалуйста, один топик - один вопрос.

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

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

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

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

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


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

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


 




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


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

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