Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Заголовок сообщения: |
|
|
Примерно так получилось:
а тут что неправильно посмотрите плиз)
я пока только, чтобы слово выделилось #slovo# вот так, сделал. Но он мне вставляет перед текстом #karakuli#text где каракули 4 знака каких то странных пишет(
#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 - дописывает заданное число символов одной строки в другую
Этих стандартных функций тебе будет достаточно. Более подробную инфу смотри в хелпе.
Я умышленно не привожу здесь код решения твоей задачи, чтобы ты сам покопался в библиотеках и разобрался. Не стоит изобретать колесо.
Но если будет что непонятно, спрашивай. |
|
Вернуться к началу |
|
|
|