2.2 Використання вказівників при роботі з рядками

 

Символьна константа складається з одного символа ASCII між апострофами (''). Приклади спеціальних символів:

Новий рядок '\n'
Горизонтальна табуляція '\t'
Повернення каретки '\r'
Апостроф '\''
Лапки '\"'
Нульовий символ '\0'
Зворотний слеш '\\'

Символьні дані в С предствляють у вигляді стрингів. Стринги є одним з найбільш корисних та важливих типів даних мови С. Символьний рядок (стринг) — це масив символів, що закінчується у лапки ("). Він має тип char. Нульовий символ (\0) автоматично додається останнім байтом символьного рядка та виконує роль ознаки його кінця. Кількість елементів у масиві дорівнює кількості символів у стрингу плюс один, оскільки нульовий символ також є елементом масива. Кожна стрингова константа, навіть у випадку, коли вона ідентична іншій стринговій константі, зберігається у окремому місці пам'яті. Якщо необхідно ввести у рядок символ лапок ("), то перед ним треба поставити символ зворотного слешу (\). У стринг можуть бути введені будь-які спеціальні символьні константи, перед якими стоїть символ \.

Прототипи всіх функцій, що працюють з рядками символів, містяться у файлі string.h. Всі функції працюють з рядками, що закінчуються нульовим символом. Ось деякі з них:

int strcat( char *, char *) — з'єднати два стринги;

int strcpy(char *s1, char *s2) — копіювати рядок s2 у рядок s1;

int strlen(char *s) — визначити довжину рядку (кількість символів без нульового символа).

Для роботи з масивом символів, що не має у кінці нульового байта, можна користуватися функціями перетворення буферів. Протипи цих функцій знаходяться у файлі 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);

}

double val(char** s)

{

double res=multi(s);

while((**s!=')') && (**s!='\0'))

if(**s=='+') res+=multi(++*s);

else res-=*(++*s);

if(**s==')') ++*s;

return res;

}

double getsvalue(char* s) {char** l; *l=s;

return val(l);}

main()

{

char* s="2-4/2+25/(2+3)/5+(-1)*(2*4/8-2)*(-1)+5";

cout << getsvalue(s);

}

3.Порядок виконання роботи

Проаналізувати умову задачі.

Розробити алгоритм та створити програму розв’язання задачі згідно з номером варіанту.

Результати роботи оформити протоколом


Информация о работе «Вказівки, масиви і символьні рядки в мові C»
Раздел: Информатика, программирование
Количество знаков с пробелами: 10707
Количество таблиц: 4
Количество изображений: 1

Похожие работы

Скачать
13173
0
9

... форматі (15 знаків), long е – довге представлення в експонентному форматі (15 знаків мантиси і 3 порядки), hex - представлення чисел в шістнадцятеричній формі; bank - представлення для грошових одиниць. Основи роботи з векторами і матрицями. Якщо необхідно задати вектор з трьох елементів, то їх значення треба перерахувати в квадратних дужках, розділяючи пропусками. Задання матриці вимагає вказі ...

Скачать
206879
0
16

... . Механізм переривань забезпечує ефективна взаємодія пристроїв уведення-висновку з мікропроцесором. Переривання цікавлять нас тому, що обробка переривань - це прерогатива програмування на мові асемблера. У високорівневих мовах відсутні засоби роботи з перериваннями на машинному рівні. Переривання звичайно викликаються зовнішніми пристроями. Переривання сигналізує мікропроцесору, щоб він призупинив ...

Скачать
67862
1
1

... мене основним принципам побудови алгоритмів, програм, вибору структур даних. Ця дисципліна вчить мене думати, надає мені практичних знань та досвіду, щоб розробляти модель програми ще до стадії набору програми на заданій мові програмування. Ця дисципліна вчить мене тим основним речам, без яких жоден представник вибраної мною професії не може обійтись у своїй праці, тим основам, які повинні буди зі ...

Скачать
27398
0
2

... процесором, тільки коли він працює в приміщенням режимі. Метою виконання даної курсової роботи є отримання практичних навичок роботи програмування мовою асемблера. Підсумком виконання курсової роботи є розробка алгоритму контролю на парність масиву даних, що зберігається в деякій області пам'яті і програми на мові асемблера, який реалізує даний алгоритм. 1. Загальний розділ Надійність ...

0 комментариев


Наверх