Кодировка текста путем сдвига символов - 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
закрываются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д