Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Сортировка в файле
Показать сообщение отдельно

Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar Release.rar
(16.5 Kb, 7 просмотров)

Цитата:
Так не чего и не понял...или у меня высасали мозг...или )))

Можно ещё раз полный код только С ну и начало С++
Поиск в тексте (текст 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);
}

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:27, 11-07-2008 | #17

Название темы: Сортировка в файле