Кодировка текста путем сдвига символов - C (СИ)
Формулировка задачи:
#include <stdio.h> char code(char *c, int n) { int i; for (i=0; c[i]!=0; i++) { c[i]=c[i]+n; if (c[i]>'z') c[i]=c[i]-'z'+'a'-1; if (c[i]<'a') c[i]=c[i]+'z'-'a'+1; } } int main() { FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w"); int n=10; char c; while (!feof) { c=getc(f); if (c>='a' && c<='z') putc(code(c,n),g); } fclose(f); fclose(g); }
Решение задачи: «Кодировка текста путем сдвига символов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h>// exit() char code1(char c, int n) { // int i; //warning C4101: 'i' : unreferenced local variable c=c+n; //c+=n; if (c>'Z') c -= ('Z'-'A'+1); else if (c>'Z') c += ('Z'-'A'+1);// Z-A+1 == z-a+1 величина постоянная... return c; // добавил // для изменения операнда надо делать void code() и вызвать code(&c,n) } char code(char c, int n) { c=c+n; if (c>'z') c -= ('z'-'a'+1); else if (c<'a') c += ('Z'-'A'+1); return c; } int main(void) { int n=-2; char c; // int fgetc(FILE *stream);//int fputc(int ch, FILE *stream); FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w"); if (f==NULL || g == NULL) { printf("He удается открыть файл. (%x %x)\n", f, g); exit(1); } printf("файл.\n"); while ((c=fgetc(f)) !=EOF) { if (c>='a' && c<='z') fputc(code(c,n), g); else if (c>='A' && c<='Z') fputc(code1(c,n), g); else fputc(c, g); } fclose(f); fclose(g); }
Объяснение кода листинга программы
- В функции
code1
сдвиг символов осуществляется путем добавления значения переменнойn
к символуc
. - Если сдвиг приводит символ
c
за пределы диапазона от 'A' до 'Z', то происходит обратный сдвиг на величину ('Z'-'A'+1). - В функции
code
сдвиг символов также осуществляется путем добавления значения переменнойn
к символуc
. - Если сдвиг приводит символ
c
за пределы диапазона от 'a' до 'z', то происходит обратный сдвиг на величину ('z'-'a'+1). - В функции
main
открываются два файла -f
для чтения иg
для записи. - В цикле пока не достигнут конец файла, каждый символ из файла
f
проверяется на принадлежность к диапазону от 'a' до 'z' или от 'A' до 'Z'. - Если символ принадлежит к диапазону от 'a' до 'z', то он сдвигается с помощью функции
code
, а затем записывается в файлg
. - Если символ принадлежит к диапазону от 'A' до 'Z', то он сдвигается с помощью функции
code1
, а затем записывается в файлg
. - Если символ не принадлежит ни к одному из указанных диапазонов, то он записывается в файл
g
без изменений. - После завершения чтения файла
f
оба файлаf
иg
закрываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д