Ветеран
Сообщения: 1404
Благодарности: 135
|
Профиль
|
Отправить PM
| Цитировать
Цитата:
Так не чего и не понял...или у меня высасали мозг...или )))
Можно ещё раз полный код только С ну и начало С++
Поиск в тексте (текст 1 слово одна строчка)
1. Найти слово.
2. Найти в 10 срочке 3 символ
3. Найти все слова которые начинаются на "А"
4. Найти все слова которые заканчиваются на "Б"
И если не сложно то с обьяснениями, а тореально не могу вьехать...а хочу мозг прописать дял компа
|
Код: 
#include <windows.h>
#include <stdio.h>
#define Msg(x) MessageBox(0,x,"program",MB_OK)
typedef char* strng;
strng create_string();
strng create_string(int sz);
void delete_string(strng m);
void print_string(strng t);
int len_string(strng m);
strng rus_string_to_console(strng m);
char get_string_symbol(strng m,int nm);
void set_string_symbol(strng m, char s,int nm);
void terminate_string(strng m, int sz);
strng concatenate_string(strng m,strng n);
void copy_string(strng m,strng n);
int check_eng_symbol(char m);
int check_rus_symbol(char m);
int find(strng,int,int,int);
void find_word(strng t,int ls, strng slovo);
void find_sym(strng t,int ls, char sg);
strng create_string()
{
strng m;
m = new char[];
return (m);
}
strng create_string(int sz)
{
strng m;
m = new char[sz+1];
terminate_string(m, sz+1);
return (m);
}
void delete_string(strng m)
{
delete[] m;
}
void print_string(strng t)
{
int i;
for (i=0;t[i]!='\0';i++)
{
printf("%c",t[i]);
}
}
int len_string(strng m)
{
int i=0;
while (m[i] != '\0')
++i;
return i;
}
strng rus_string_to_console(strng m)
{
strng szBuffer;
int ln1=len_string(m);
szBuffer=create_string(ln1);
CharToOem(m, szBuffer);
return(szBuffer);
}
char get_string_symbol(strng m,int nm)
{
return (m[nm]);
}
void set_string_symbol(strng m, char s,int nm)
{
m[nm]=s;
}
void terminate_string(strng m, int sz)
{
m[sz-1]='\0';
}
strng concatenate_string(strng m,strng n)
{
strng szBuffer;
int ln,i,r,ln1,ln2;
ln1=len_string(m);
ln2=len_string(n);
ln=ln1+ln2;
szBuffer=create_string(ln);
r=0;
for (i=0;i<ln1;i++)
{
set_string_symbol(szBuffer, m[i],r);
r++;
}
for (i=0;i<ln2;i++)
{
set_string_symbol(szBuffer, n[i],r);
r++;
}
terminate_string(szBuffer,ln+1);
return szBuffer;
}
void copy_string(strng m,strng n)
{
int ln1,i;
ln1=len_string(m);
for (i=0;i<ln1;i++)
{
set_string_symbol(n, m[i],i);
}
terminate_string(n, ln1+1);
}
void main()
{
strng d="hash5.cpp"; // ФАЙЛ в котором ищем
HANDLE hFile;
strng t;
DWORD cbreading;
DWORD fzi;
BOOL bResult;
strng slovo="return";
if (hFile=CreateFile(d,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL))
{
fzi = GetFileSize(hFile, NULL);
t=create_string(fzi);
bResult = ReadFile(hFile, t, fzi, &cbreading, NULL);
if(!bResult) {
Msg("Невозможно прочитать файл!");
}
else
{
find(t, (int)fzi, 10,3); // 2. Найти в 10 строчке 3 символ
find_word(t,(int)fzi, slovo); //1. Найти слово.
find_sym(t, (int)fzi, 'r');
find_sym(t, (int)fzi, '\xc0'); //3. Найти все слова которые начинаются на "А"
find_sym(t, (int)fzi, '\xc1');//4. Найти все слова которые заканчиваются на "Б"
}
delete_string(t);
CloseHandle(hFile);
}
}
// 2. Найти в 10 строчке 3 символ
int find(strng t,int ls, int str,int numsym)
{
// t- строка в которой ищем А
// str - в какой строчке ищем Б
// numsym - какой символ ищем
int i,cnt2,counter,booll;
strng k;
strng l;
counter=1;
booll=0;
cnt2=-1;
for (i=0;i < ls;i++)
{
/* Поиск N символа в строке*/
if (t[i]=='\x0a')
{
if (t[i-1]=='\x0d')
{
counter++; //Увеличиваем счетчик строк
cnt2=-1; // счетчик символов
if (counter==str)
{
booll=1; // Мы в str строке
}
else
{
booll=0; // Мы не в str строке
}
}
}
cnt2++; // увеличиваем счетчик символов
if (cnt2==numsym) // Если numsym символ
{
if (booll==1) // Если str строка
{
printf("%d",numsym);
k="\x20символ в\x20";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf("%d",counter);
k="\x20строчке:\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf("\t%C\n",t[i]);
return(1);
}
}
}
return(0);
}
//1. Найти слово.
void find_word(strng t,int ls, strng s)
{
int i,pos,counter;
strng k;
strng l;
pos=0;
counter=1;
for (i=0;i<len_string(s);i++)
printf("%C",s[i]);
printf("\n");
for (i=0;i < ls;i++)
{
if (t[i]=='\x0a')
{
if (t[i-1]=='\x0d')
{
counter++; //Увеличиваем счетчик строк
}
}
if (t[i]==s[pos])
{
pos++;
if (pos==len_string(s))
{
k="Искомое слово\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
print_string(s);
k="\x20найдено в\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf ("%d",counter);
k="\x20строчке\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf("\n");
}
}
if (pos > 0 && t[i]!=s[pos-1])
{
pos=0;
}
}
}
//3. Найти все слова которые начинаются на "А"
void find_sym(strng t,int ls, char sg)
{
int i,j,nach_sl,kon_sl,insl,counter;
strng k;
strng l;
counter=1;
insl=0;
for (i=0;i < ls;i++)
{
if (t[i]=='\x0a')
{
if (t[i-1]=='\x0d')
{
counter++; //Увеличиваем счетчик строк
}
}
if (t[i]==sg && (t[i-1]=='\t' ||t[i-1]=='\x0a' ||t[i-1]=='\x20'||t[i-1]=='\n' ))
{
insl = 1;
nach_sl = i;
}
if (check_rus_symbol(sg))
{
if (insl == 1 && ! ( check_rus_symbol(t[i]) ) )
{
kon_sl = i;
insl = 0;
k="Cлово начинающееся с символа\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf ("\x20%C :\x20",sg);
for (j=nach_sl; j<kon_sl;j++)
{
printf ("%C",t[j]);
}
k="\x20в строке\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf ("%d\n",counter);
}
}
else if (check_eng_symbol(sg))
{
if (insl == 1 && ! ( check_eng_symbol(t[i]) ) )
{
kon_sl = i;
insl = 0;
k="Cлово начинающееся с символа\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf ("\x20%C :\x20",sg);
for (j=nach_sl; j<kon_sl;j++)
{
printf ("%C",t[j]);
}
k="\x20в строке\x20\0";
l=rus_string_to_console(k);
print_string(l);
delete_string(l);
printf ("%d\n",counter);
}
}
}
}
//Принадлежит ли символ английскому алфавиту
int check_eng_symbol(char m)
{
if ( (m>='\x41' && m<='\x5a') || (m>='\x61' && m<='\x7a') )
return (1);
else
return (0);
}
//Принадлежит ли символ русскому алфавиту в кодировке windows
int check_rus_symbol(char m)
{
if ( (m>='\xc0' && m<='\xdf') || (m>='\xe0' && m<='\xff') )
return (1);
else
return (0);
}
|