Кодировщик текста из ср1251 в koi8-р - C (СИ)
Формулировка задачи:
ситуация такая, есть 2 файла, один пустой, другой нет. не пустой файл имеет кодировку ср1251. программа должна переписать текст из этого файла в пустой файл, но с кодировкой кои8-р. код написал, но текст выдает некорректно, всегда выдает символы "аааааа". разницы кодов символов проверял, ошибка в другом. помогите)
#include <stdio.h> #include <string.h> char function(char s) { if (s<128)//стандартные { s=s; } else {if(s=254)//ю s-=62; else if (((s=224)||(s=225))||((s>=232)&&(s<=239)))//а б и й к л м н о п s-=31; else if (s=246)//ц s-=51; else if ((s=228)||(s=229))//д е s-=32; else if ((s=244)||(s=255))//ф я s-=46; else if (s=227)//г s-=28; if (s=184)//ё s-=21; else if (s=245)//х s-=45; else if(s=255)//я s-=46; else if ((s>=240)&&(s<=243))//р с т у s-=30; else if (s=230)//ж s-=16; else if (s=226)//в s-=11; else if (s=252)//ь s-=36; else if (s=251)//ы s-=34; else if (s=231)//з s-=13; else if (s=248)//ш s-=29; else if (s=253)//э s-=33; else if (s=249)//щ s-=28; else if (s=247)//ч s-=25; else if (s=250)//ъ s-=27; } //заглавные if (s=222)//Ю s+=2; else { if ((s=192)||(s=193)||((s>=200)&&(s<=207)))//А Б И Й К Л М Н О П s+=33; else if(s=214)//Ц s+=13; else if ((s=196)||(s=197))//Д Е s+=32; else if (s=212)//Ф s+=18; else if (s=195)//Г s+=36; else if(s=213)//Х s+=19; else if(s=223)//Я s+=18; else if ((s>=208)&&(s<=211))//Р С Т У s+=34; else if(s=198)//Ж s+=48; else if(s=194)//В s+=53; else if(s=220)//Ь s+=28; else if(s=219)//Ы s+=30; else if(s=199)//З s+=51; else if(s=216)//Ш s+=35; else if (s=221)//Э s+=31; else if (s=217)//Щ s+=36; else if (s=215)//Ч s+=39; else if (s=218)//Ъ s+=37; else if (s=168)//Ё s+=11; } return s; } char main() { FILE *f1=fopen("f1.txt","r"), *f2=fopen("f2.txt","a"); char i, n; if (f1!=NULL) { while (!feof(f1)) { i=fgetc(f1); n=function(i); fputc (n, f2); } fclose (f1); fclose (f2); }else { return -1; } }
Решение задачи: «Кодировщик текста из ср1251 в koi8-р»
textual
Листинг программы
bool xMMF::OpenReadOnly(const char* const pszFileName) { if (_bOpen) { Close(); } // Open File errno = 0; // Preset ! _iFD = open(pszFileName,O_RDONLY | O_SYNC,S_IRWXG); if (_iFD == -1) { // Error ! DESCRIBE_ERROR(errno); return false; } // Trick !! // Get File Size _iSize = lseek(_iFD,0,SEEK_END); if (_iSize == -1) { // Error ! return false; } // Create View _pView = mmap(NULL,_iSize,PROT_READ,MAP_SHARED,_iFD,0); if (_pView == MAP_FAILED) { // Error ! return false; } _bReadOnly = true; _bOpen = true; return _bOpen; }
Объяснение кода листинга программы
В данном коде представлена функция, которая открывает файл в режиме только для чтения. Вот список действий, которые она выполняет:
- Если файл уже открыт, функция закрывает его.
- Функция открывает файл, используя указанный в параметрах путь. Открытие происходит в режиме только для чтения (O_RDONLY | O_SYNC) и с правами доступа S_IRWXG.
- Если открытие файла не удалось, функция закрывает его и возвращает false.
- Функция получает размер файла, используя функцию lseek и смещение в 0.
- Если получение размера файла не удалось, функция закрывает его и возвращает false.
- Функция создает отображение файла в память с использованием функции mmap.
- Если отображение файла в память не удалось, функция закрывает его и возвращает false.
- Функция устанавливает флаг _bReadOnly в true.
- Функция устанавливает флаг _bOpen в true.
- Функция возвращает true.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д