Задачи из учебника Кернигана и Ритчи - C (СИ)
Формулировка задачи:
Недавно приобрел учебник по программированию на языке С авторов Кернигана и Ритчи. Там есть много интересных задач. Предлагаю в этой теме приводить свои решения и оптимизировать уже имеющиеся.
Вот упражнение 1.20. Работает корректно, но я так думаю вариант не самый оптимальный =)
Написать программу detab, которая бы заменяла символы табуляции во входном потоке соответствующим количеством пробелов до следующей границы табуляции. Предположим что табуляция имеет фиксированную ширину n столбцов. Следует ли сделать n переменной или символическим параметром?
Хотелось бы послушать аргументированную критику.
#include <stdio.h>
#define TABMAX 8 //ширина табуляции
void detab(int tabSize);
int main()
{
detab(TABMAX);
return 0;
}
void detab(int tabSize)
{
int ch, pos;
pos = 0;
while((ch = getchar()) != EOF) {
if(ch == '\n') {
putchar(ch);
ch = getchar();
pos = 0;
}
if(ch == '\t')
do {
putchar(' ');
++pos;
} while(pos % tabSize);
else {
putchar(ch);
++pos;
}
}
}Решение задачи: «Задачи из учебника Кернигана и Ритчи»
textual
Листинг программы
char *detab(char *String, int tabSize)