Кодировка текста путем сдвига символов - 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закрываются.