На главную страницу

Решения к упражнениям из книги "Язык программирования С" Б. Керниган и Д. Ритчи

Упражнение 3.3.


Напишите функцию expand(s1,s2), которая бы разворачивала сокращенную запись наподобие a-z в строке s1 в полный список abc...xyz в строке s2. Учитывайте буквы в любом регистре, цифры, а также записи вида a-b-c, a-z0-9 и -a-z. Сделайте так, чтобы знаки - в начале и в конце строки воспринимались буквально, а не как символы развертывания
----------
/* Exercise 3.3 from "The C programming language" book by K&R */

#include <stdio.h>

/* unwrap shortcut sequence in s1[] to full sequence in s2[] */
void expand(char s1[], char s2[])
{
	int i, j, k;
	k = 0;
	for (i = 0; s1[i] != '\0'; i++)
		if (s1[i] == '-')
			if (i == 0 || s1[i+1] == '\0')
				s2[k++] = '-';
			else
				for (j = s1[i-1]; j <= s1[i+1]; j++)
					s2[k++] = j;
	s2[k] = '\0';
}

int main(void)
{
	char s1[] = "-a-z0-9d-f-";
	char s2[128] = "";
	expand(s1, s2);
	printf("s1=%s\ns2=%s\n", s1, s2);
	return 0;
}
	
----------

Последнее изменение: 24 май 2011