Download as pdf or txt
Download as pdf or txt
You are on page 1of 37

Міністерство освіти і науки України

Національний університет “Львівська політехніка”


Кафедра САПР
Алгоритмізація та програмування,
частина 1:

Програмування мовою С
Символьні рядки
ЛЕКТОР:
асистент каф. САПР, к.т.н.
Яворський Назарій Борисович
E-Mail: nazarii.b.yavorskyi@lpnu.ua

Львів - 2020
Програмування мовою С: Символьні рядки

Таблиця ASCII символів

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 2
Програмування мовою С: Символьні рядки

Таблиця ASCII символів

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 3
Програмування мовою С: Символьні рядки

Таблиця ASCII символів

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 4
Програмування мовою С: Символьні рядки

Таблиця ASCII символів

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 5
Програмування мовою С: Символьні рядки

Таблиця ASCII символів

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 6
Програмування мовою С: Символьні рядки

ASCII Art

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 7
Програмування мовою С: Символьні рядки

Загальні відомості

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 8
Програмування мовою С: Символьні рядки

Нуль-термінований рядок (С-String)


У програмуванні нуль-термінований рядок — це рядок символів, що зберігаються у
символьному масиві та завершуються нуль-символом ('\0' у ASCII позначається як
NUL). Альтернативна назва — Cі-рядок, якщо це стосується мови програмування Cі
та в загальному випадку ASCIIZ-рядок (Cі-рядок не має на увазі обов’язкове
використання ASCII). Нуль-термінальні рядки широко використовуються при
зверненнях до API-функцій Windows.

Нуль-термінований рядок був створений за допомогою .ASCIIZ


директиви PDP-11
В той час, коли створювалася мова C, пам'ять була вкрай
обмежена, тому використання всього одного зайвого байта для
збереження довжини рядка було привабливою ідеєю. Єдина,
популярна на той момент, альтернатива називалася «Рядок
Pascal». Вона використовувала перший байт, щоб зберігати
довжину рядка. На довжину рядка накладається обмеження,
пов'язане з місткістю нульового елемента масиву, тобто у
випадку з однобайтовими елементами довжина рядка не може
PDP-11 - серія 16-розрядних перевищувати 255 символів. Нуль-терміновані рядки до такого
міні-ЕОМ компанії DEC, що обмеження не схильні і теоретично можуть зберігати рядки
серійно вироблялися та
будь-якої довжини.
продавалися в 1970-80-х роках
Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 9
Програмування мовою С: Символьні рядки

Нуль-термінований рядок (С-String)

Не плутати!
також

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 10
Програмування мовою С: Символьні рядки

Стрічкові літерали

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 11
Програмування мовою С: Символьні рядки

Стрічкові літерали
#include <stdio.h>
#define MSG "Hello world"
int main(void)
{
char arr[] = MSG;
const char *ptr = MSG;
printf("address of \"Hello world\": %p\n", "Hello world");
printf("address of arr: %p\n", arr);
printf("address of ptr: %p\n", ptr);
printf("address of MSG: %p\n", MSG);
return 0;
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 12
Програмування мовою С: Символьні рядки

Ініціалізація

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 13
Програмування мовою С: Символьні рядки

Ініціалізація

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 14
Програмування мовою С: Символьні рядки

Стрічка як масив

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 15
Програмування мовою С: Символьні рядки

Ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 16
Програмування мовою С: Символьні рядки

Ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 17
Програмування мовою С: Символьні рядки

Ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 18
Програмування мовою С: Символьні рядки

Ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 19
Програмування мовою С: Символьні рядки

Ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 20
Програмування мовою С: Символьні рядки

Стандартні функції

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 21
Програмування мовою С: Символьні рядки

Стандартні функції

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 22
Програмування мовою С: Символьні рядки

Стандартні функції
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\"\n"
"into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n", pch);
pch = strtok (NULL, " ,.-");
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 23
Програмування мовою С: Символьні рядки

Стандартні функції

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 24
Програмування мовою С: Символьні рядки

Стандартні функції

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 25
Програмування мовою С: Символьні рядки

Порівняння рядків

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 26
Програмування мовою С: Символьні рядки

Приклад

#include <stdio.h>
#include <string.h>
int main()
{
char r1[ ] = "One two three";
printf("%s\n", r1);
printf("The length of string = %d\n", strlen(r1));
char *p= strtok(r1, " ");
p = strtok(NULL, " ");
printf("%s\n", p);
return 0;
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 27
Програмування мовою С: Символьні рядки

Приклад

#include <stdio.h>
int main()
{
char r1[ ] = "One two three";
printf("%s\n",r1);
int len; for(len=0;r1[len];++len);
printf("The length of string = %d\n",len);
int n;
for(n=0;r1[n]!=' ';++n);
for(++n;r1[n]!=' ';++n)putchar(r1[n]);
return 0;
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 28
Програмування мовою С: Символьні рядки

Приклад

#include <stdio.h>
#include <string.h>
int main()
{
char str[5][256];
for(int i=0; i<5; ++i)
scanf("%s", str[i]);
for(int i=0; i<5; ++i)
for(int j=0; j<4; ++j)
if(strcmp(str[j], str[j+1]) > 0)
{
char tmp[256];
strcpy(tmp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], tmp);
}
for(int i=0; i<5; ++i) puts(str[i]);
return 0;
}
Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 29
Програмування мовою С: Символьні рядки

Приклад

#include <stdio.h>
#include <ctype.h>
int main(){
char ch;
puts("Please input text. Press Ctrl+Z to finish");
while((ch=getchar())!= EOF)
{
if(islower(ch)) ch = toupper(ch);
else ch = tolower(ch);
putchar(ch);
}
return 0;
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 30
Програмування мовою С: Символьні рядки

Ще деякі стандартні функції

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 31
Програмування мовою С: Символьні рядки

Небуферизований ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 32
Програмування мовою С: Символьні рядки

Небуферизований ввід-вивід

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 33
Програмування мовою С: Символьні рядки

Небуферизований ввід-вивід

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
int main()
{
char ch;
puts("Please input text. Press '.' to finish");
while((ch=getch())!= '.')
{
if(islower(ch)) ch = toupper(ch);
else ch = tolower(ch);
putch(ch);
}
return 0;
}
Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 34
Програмування мовою С: Символьні рядки

Приклад

#include <stdio.h>
#include <string.h>
int main()
{ int letters[26], length = 0;
char text[1024], ch;
for(int i=0; i<26; ++i) letters[i] = 0;
puts("Please input text. Press Ctrl+Z to stop");
while((ch = getchar()) != EOF){
if((ch >= 'a')&&(ch <= 'z'))
letters[ch - 'a']++;
else if((ch >= 'A') && (ch <= 'Z'))
letters[ch -'A']++;
++length;
}
puts("Letters frequency:");
for(int i=0; i<26; i += 2)
printf("%c: %7.3lf%%\t%c: %7.3lf%%\n",
i + 'A', 100.0 * letters[i] / length,
i+'A' + 1, 100.0 * letters[i+1] / length);
return 0;
}

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 35
Програмування мовою С: Символьні рядки

Зауваження

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 36
Програмування мовою С: Символьні рядки

Алгоритмізація та програмування, частина 1. Лектор – асист. каф. САПР, к.т.н.Яворський Н.Б., Львів, 2020 37

You might also like