|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Сортировка в файле |
|
C/C++ - Сортировка в файле
|
Пользователь Сообщения: 147 |
Профиль | Отправить PM | Цитировать Как осущесвялется сортировка в файлах и поиск.
пример. ФАйла в одной строке одно слова. Расортировать их по алфавиту и разбить на файлы по кол-ву букв. |
|
Отправлено: 11:39, 09-07-2008 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать mrcnn, Вроде bool пишется с одной l, а не с двумя.
|
------- Отправлено: 16:30, 10-07-2008 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать booll это имя переменной, а именам переменных нельзя присваивать названия ключевых слов, поэтому я добавил в конец еще одну l
|
------- Отправлено: 17:28, 10-07-2008 | #12 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать \x0d\x0a - это что такое я такое даже не изучал???
это какой язык?=0 |
Отправлено: 22:56, 10-07-2008 | #13 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать mrcnn,
Цитата mrcnn:
|
|
------- Последний раз редактировалось Drongo, 10-07-2008 в 23:39. Отправлено: 23:22, 10-07-2008 | #14 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать В C нет типа bool. Булевую переменную объявляем как int или unsigned int.
В windef.h даже так и объявлено В С++ тип bool есть. Таким образом булевая переменная в C объявляется как В С++ можно объявить булевую переменную но компилятор выдаст ошибку, если ты попытаешься объявить переменную так: Литералы в С есть 1. в десятичной системе счисления 1,2,3 2. в восьмееричной системе счисления 01,02,03 3. в шестнадцатеричной системе счисления x1,x2,x3 Управляющие последовательности записываются с помощью символа \ Например \n \ t \r Если мы хотим в тексте написать шестнадцатеричное число, то мы его записываем с помощью управляющей последовательности \xЧИСЛО Например: \x1, \xa, \xf |
------- Отправлено: 07:58, 11-07-2008 | #15 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать Так не чего и не понял...или у меня высасали мозг...или )))
Можно ещё раз полный код только С ну и начало С++ Поиск в тексте (текст 1 слово одна строчка) 1. Найти слово. 2. Найти в 10 срочке 3 символ 3. Найти все слова которые начинаются на "А" 4. Найти все слова которые заканчиваются на "Б" И если не сложно то с обьяснениями, а тореально не могу вьехать...а хочу мозг прописать дял компа |
Отправлено: 11:21, 11-07-2008 | #16 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать Цитата:
#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); } |
|
------- Отправлено: 15:27, 11-07-2008 | #17 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать strng create_string(); - это что я с этим ещё не сталкивался.
|
Отправлено: 23:12, 11-07-2008 | #18 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать С чем ты еще не сталкивался?
strng create_string(); это объявление функции, не имеющей параметров и возвращающей значение типа strng. Кода функции нет, программа должна искать его в другом месте, например ниже в тексте этого файла, в других cpp файлах, в lib файлах и т.д. В общем случае функции объявляются следующим образом: [тип_возвращаемого_значения] имя_функции (список_параметров) Объявление функции возможно: 1. непосредственно в файле с кодом, т.е в файлах .c/.cpp 2. в заголовочных файлах т.е в файлах .h strng create_string(); Это один из вариантов перегружаемой функции. Перегрузкой называется объявление функций с одним и тем же именем, но разным списком аргументов. В своих программах я придерживаюсь следующего порядка: заголовочные файлы и макросы список функций глобальные переменные main() или WinMain() код функций Можно создать свое имя для какого-то типа данных, отражающее его сущность с помощью ключевого слова typedef typedef char* strng typedef базовый_тип_данных пользовательский_тип_данных strng create_string(); эквивалентно char* create_string(); Это нужно, чтобы функция продолжала оставаться рабочей даже если мы переопределили тип по другому, т.е например написали typedef int* strng В моей программе переопределить так тип не получится, нужна проверка в функциях на соответствие данных. В общем случае лучше в каждой функции проверять соответствие параметров нужным - это сильно упрощает последующее использование кода в каких-либо других проектах. |
------- Отправлено: 15:31, 12-07-2008 | #19 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать Только сейчас смог запустить код
и сразу ошибки Error 1 error C2664: 'CharToOemW' : cannot convert parameter 1 from 'strng' to 'LPCWSTR' c:\documents and settings\dudaev\мои документы\visual studio 2005\projects\балда\балда\балда.cpp 216 Error 2 error C2664: 'CreateFileW' : cannot convert parameter 1 from 'strng' to 'LPCWSTR' c:\documents and settings\dudaev\мои документы\visual studio 2005\projects\балда\балда\балда.cpp 286 Error 3 error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [27]' to 'LPCWSTR' c:\documents and settings\dudaev\мои документы\visual studio 2005\projects\балда\балда\балда.cpp 293 и find это разве С ? hFile=CreateFile(d, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) вот это как понять? strng - это какой тип? я такого не изучал. и как можно понять такую запись !bResult |
Последний раз редактировалось DENoszone, 14-07-2008 в 13:34. Отправлено: 13:19, 14-07-2008 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Сортировка файлов | kt626 | Скриптовые языки администрирования Windows | 2 | 28-03-2009 10:47 | |
Сортировка... | skeletor | Хочу все знать | 14 | 16-03-2007 18:32 | |
Сортировка в Exсel | Evita | Хочу все знать | 2 | 11-01-2006 14:24 | |
Многофазная сортировка | mask | Программирование и базы данных | 1 | 04-06-2003 23:40 | |
Быстрая сортировка | noname00.pas | Программирование и базы данных | 12 | 04-03-2002 17:32 |
|