Лабораторная работа: Вказівки, масиви і символьні рядки в мові C
Для роботи з масивом символів, що не має у кінці нульового байта, можна користуватися функціями перетворення буферів. Протипи цих функцій знаходяться у файлі mem.h. Ці функції дозволяють присвоювати кожному байту в межах вказаного буфера задане значення, а також використовуються для порівняння вмісту двох буферів. Наприклад:
memcpy() — копіювання символів з одного буфера у другий, поки не буде скопійований заданий символ або не буде скопійовано визначену кількість символів
memcmp() — порівнює вказану кількість символів з двох буферів
У файлі ctype.h описано прототипи функцій, що призначені для перевірки літер. Ці функції повертають ненульове значення (істина), коли її аргумент задовольняє заданій умові або належить вказаному класу літер, та нуль в іншому випадку. Наприклад:
int islower(int с) — символ с є малою літерою;
int isupper(int c) — символ с є великою літерою;
int isalnum(int c) — символ с є буквою або цифрою;
int isalpha(int c) — символ с є буквою;
int tolower(int c) — перетворення літери у нижній регістр;
int strtol(int c) — перетворення стрингу у довге ціле число;
Приклад
Обчислити вираз з дужками, десятковими цифрами та знаками +, -, *, /.
#include <ctype.h>
#include <math.h>
isdig(char c) {return ((isdigit(c)) || 'с'=='.');}
double val(char **);
double getdig(char ** s)
{
double res;
if(**s=='(') res=val(++*s);
else {res=atof(*s); while(isdig(*++*s));};
return res;
}
double multi(char** s)
{
double res=getdig(s);
while((**s=='*') || (**s=='/'))
if(**s=='*') res*=getdig(++*s);
else res/=getdig(++*s);
}