Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Поиск сло в тексте. Turbo C++ =)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
eXtreme
Гость





СообщениеДобавлено: Чт Май 06 2004 20:43    Заголовок сообщения: Поиск сло в тексте. Turbo C++ =) Ответить с цитатой

Подскажите пожалуйста как сделать, чтобы программ нашходила слово в выведенном на экран тексте из файла, слово вводить с клавиатуры. Текст он выводит, а слово ввожу он его не выделяет. Может не через окно надо? Поправте пожауйста. Заранее спасибо.
Код:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <graphics.h>

void main(void)
{
  char *st,*ss,*sl;
  int i,k,lstr,j,l;
  float n;
  FILE *f_in;
  clrscr();
  //-----------------
  //printf("\n Enter file's name with text ");
 //scanf("%s",ss);
 // f_in=fopen(ss,"rb");
  //-----------------
  f_in=fopen("c:\\turboc30\\!my_work\\kurs\\text.txt","rb");
  //-----------------
  clrscr();
      fseek(f_in,0,SEEK_END);
  lstr=ftell(f_in);
  st=(char*)malloc((lstr+1)*sizeof(char));
  fseek(f_in,0,SEEK_SET);
  for(i=0;i<lstr;i++)
  fscanf(f_in,"%c",&st[i]);
  *(st+lstr)='\0';
  clrscr();
  window(1,1,71,lstr/70+3);
  textbackground(8);
  textcolor(15);
  clrscr();
  gotoxy(1,1);
  for(i=0;i<lstr;i++)
  printf("%c",*(st+i));
  sl=(char*)malloc(20*sizeof(char));
  printf("\n Enter word for find in text ");
 //  for(j=0;j<10;j++)
 // scanf("%c",&sl[j]);
  scanf("%s",sl);
  l=1;
  k=strlen(sl)+1;

  for(i=0;i<lstr;i++)
  {
   for(j=0;j<k+1;j++)
   {
     if(i<(70*l)&&i<lstr)
      {
         if(*(st+i)==*(sl+j))
          {
             if(j=k-1)
              {
            //  printf("\n 1111");
         window(i,l,i+k,l+1);
         textbackground(3);

       }
         }
        else
         {
           if(i<lstr)
            {
             j=0;
             i++;
            }
          }
      }
     else l++;
     i++;
    }
  }

  fclose(f_in);
  free(st);
  free(sl);

 }
Вернуться к началу
eXtreme



Зарегистрирован: 06.05.2004
Сообщения: 3

СообщениеДобавлено: Чт Май 06 2004 20:48    Заголовок сообщения: Ответить с цитатой

Если без всяких ненужных коментариев, то так:
Код:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <graphics.h>

void main(void)
{
  char *st,*ss,*sl;
  int i,k,lstr,j,l;
  float n;
  FILE *f_in;
  clrscr();
    f_in=fopen("c:\\turboc30\\!my_work\\kurs\\text.txt","rb");
   clrscr();
      fseek(f_in,0,SEEK_END);
  lstr=ftell(f_in);
  st=(char*)malloc((lstr+1)*sizeof(char));
  fseek(f_in,0,SEEK_SET);
  for(i=0;i<lstr;i++)
  fscanf(f_in,"%c",&st[i]);
  *(st+lstr)='\0';
  clrscr();
  window(1,1,71,lstr/70+3);
  textbackground(8);
  textcolor(15);
  clrscr();
  gotoxy(1,1);
  for(i=0;i<lstr;i++)
  printf("%c",*(st+i));
  sl=(char*)malloc(20*sizeof(char));
  printf("\n Enter word for find in text ");
   scanf("%s",sl);
  l=1;
  k=strlen(sl)+1;

  for(i=0;i<lstr;i++)
  {
   for(j=0;j<k+1;j++)
   {
     if(i<(70*l)&&i<lstr)
      {
         if(*(st+i)==*(sl+j))
          {
             if(j=k-1)
              {
            
         window(i,l,i+k,l+1);
         textbackground(3);

       }
         }
        else
         {
           if(i<lstr)
            {
             j=0;
             i++;
            }
          }
      }
     else l++;
     i++;
    }
  }

  fclose(f_in);
  free(st);
  free(sl);

 }
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Пт Май 07 2004 09:12    Заголовок сообщения: Ответить с цитатой

Будь проще.
Краткий алгоритм:
Считать текст из файла (в буффер)
Найти слово в буффере при помощи string.h
Вывести все что до слова в буффере
Вывести подкрашенное слово
Вывести все что после слова в буффере

P.S.
А ты действительно eXtremal:)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
eXtreme



Зарегистрирован: 06.05.2004
Сообщения: 3

СообщениеДобавлено: Пт Май 07 2004 14:17    Заголовок сообщения: Ответить с цитатой

пасиб посмотрю
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
eXtreme



Зарегистрирован: 06.05.2004
Сообщения: 3

СообщениеДобавлено: Сб Май 08 2004 19:27    Заголовок сообщения: Ответить с цитатой

Примерно так получилось:
а тут что неправильно посмотрите плизSmile)
я пока только, чтобы слово выделилось #slovo# вот так, сделал. Но он мне вставляет перед текстом #karakuli#text где каракули 4 знака каких то странных пишетSad(
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <graphics.h>
#include <string.h>
#include <math.h>
int podstr(char *str,char *sl);
void numbers_in(char *s,char *w,int from,int *b_ww,int *e_ww);
void color_podstr(char *s,int b,int e);
void mark_podstr(char *s,int b, int e);
void main(void)
{
char *st,*ss,*slovo;
int i,k,lstr,j,l,l_st,b_w,e_w;
float n;
FILE *f_in;
clrscr();
//-----------------
//printf("\n Enter file's name with text ");
//scanf("%s",ss);
// f_in=fopen(ss,"rb");
//-----------------
f_in=fopen("c:\\turboc30\\!my_work\\kurs\\text.txt","rb");
//-----------------
clrscr();
fseek(f_in,0,SEEK_END);
lstr=ftell(f_in);
st=(char*)malloc((lstr+1)*sizeof(char));
fseek(f_in,0,SEEK_SET);
for(i=0;i<lstr;i++)
fscanf(f_in,"%c",&st[i]);
*(st+lstr)='\0';
clrscr();
window(1,1,71,10);
textbackground(0);
textcolor(15);
clrscr();
gotoxy(1,1);
for(i=0;i<lstr;i++)
printf("%c",*(st+i));
window(1,16,71,16);
textbackground(1);
textcolor(14);
clrscr();
gotoxy(1,16);
slovo=(char*)malloc(20*sizeof(char));
printf("\n Enter word for find in text ");
scanf("%s",slovo);
numbers_in(st,slovo,0,&b_w,&e_w);
for(i=0;i<b_w;i++)
printf("%c",*(st+i));
mark_podstr(st,b_w,e_w);
l_st=strlen(st);
for(i=e_w+1;i<l_st-1;i++)
printf("%c",*(st+i));
fclose(f_in);
free(st);
free(slovo);

}

int podstr(char *str,char *sl)
{
int l_str,l_sl,i_con,i,j,k;
l_str=strlen(str);
l_sl=strlen(sl);
i_con=l_str-l_sl;
if(l_str==0)
if(l_sl==0)
return(-1);
else
return(-2);
else
if(l_sl==0)
return(-3);
else
if(l_sl>l_str)
return(-4);
else
for(i=0;i<=i_con;i++)
{
if(*(str+i)==*sl)
{
k=1;
for(j=1;j<l_sl;j++)
if(*(str+i+j)==(*sl+j))
k++;
if(k==l_sl-1)
return(i);
}
}
return(-5);
}
void numbers_in(char *s,char *w,int from,int *b_ww,int *e_ww)
{
char *ss;
int i,n,st_s;
st_s=strlen(s);
if (from>st_s)
{
*b_ww=-6;
return;
}
else
{
n=strlen(s)-from;
ss=(char*)malloc((n+1)*sizeof(char));
for(i=0;i<=n;i++)
*(ss+i)=*(s+i+from);
*b_ww=podstr(ss,w)+from;
*e_ww=*b_ww+strlen(w)-1;
free(ss);
return;
}
}

void color_podstr(char *s,int b, int e)
{
int i;
for(i=b;i<=e;i++)
{
textbackground(15);
textcolor(0);
putchar(*(s+i));
}
return;
}

void mark_podstr(char *s,int b, int e)
{
int i;
putchar('#');
for(i=b;i<=e;i++)
putchar(*(s+i));
putchar('#');
return;
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GREA



Зарегистрирован: 14.05.2003
Сообщения: 758
Откуда: Новосибирск

СообщениеДобавлено: Вс Май 09 2004 18:48    Заголовок сообщения: Ответить с цитатой

Итак. Разберем string.h
strstr - находит подстроку в строке (возвращает указатель на подстроку, либо NULL)
strcpy - копирует одну строку в другую
strncpy - копирует заданное число символов одной строки в другую
strcat - дописывает одну строку в другую
strncat - дописывает заданное число символов одной строки в другую
Этих стандартных функций тебе будет достаточно. Более подробную инфу смотри в хелпе.
Я умышленно не привожу здесь код решения твоей задачи, чтобы ты сам покопался в библиотеках и разобрался. Не стоит изобретать колесо.
Но если будет что непонятно, спрашивай.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...