Задача 1. Даден е низ s и списък от разделители, записани в друг низ delim. Разглеждаме s като изречение, в което думите са разделени с поне един разделител. Възможно е да има разделители в началото и в края на низа. Да се запише масив от низове с отделните думи в изречението.
Упътване
І начин: Използвайте strchr, за да проверите дали един символ е разделител. Последователно обхождайте низа s.
ІІ начин: Използвайте strpbrk, за да намерите първото срещане на разделител и strncpy, за да копирате n символа.
Задача 2. Даден е низ s и двуредова таблица от символи tr. Да се "преведе" низа s, като се замести едновременно всеки символ от tr[0] със съответния символ от tr[1]. Например за s = "abcdef", tr[0] = "bed" tr[1] = "can" се получава "accnaf".

Задача 3*. Функцията sscanf работи като scanf, но чете не от стандартния вход (клавиатурата), а от подадения като първи аргумент стринг. Удобно е да се използва sscanf за четене на части от низ, например така:

sscanf("Честита нова 2006 година","Честита %s %d година",s,&d)
s = "нова"
d = 2006

като четенето се извършва само ако има точно съвпадение на шаблона. За съжаление sscanf не може да работи case insensitive, т.е. разпознаване от вида

sscanf("ЧеСтИтА НоВа ГоДиНа","Честита %s година",s)

няма да работи. Да се напише функция bool my_sscanf(char const* source, char const* pattern,char* dest), която работи като sscanf но само за точно един %s аргумент, т.е. функцията трябва да се опита да напасне source и pattern и при срещане на %s да запише съответния низ в dest. Тук напасването трябва да не отчита разликата между малките и големите букви.

Така при sscanf("ЧеСтИтА НоВа ГоДиНа","Честита %s година",s) трябва да се получава s = "НоВа".
Упътване: Сравнение на символи case insensitive може да стане по следния начин: tolower(c1) == tolower(c2), т.е. и двата символа се конвертират до съответните им малки букви и така се сравняват. Внимание: задачата няма да стане като се конвертират source и pattern едновременно към малки букви и така да се напаснат със стандартния sscanf, понеже тогава ще се получи напр. за горния пример s = "нова", което няма да е верния отговор.
Последно модифициране: събота, 12 ноември 2011, 17:38