Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_лек-3_на рус языке.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
298.5 Кб
Скачать

Различия между массивом символов и указателем на строку

Пример:

Char s1[]=”Я люблю кошек!”; // длина массива определяется автоматически

Char *s2=”Я люблю собак!”;

Главное различие s1-переменная строка,

s2-константа строка

Общее:

Для посимвольного вывода можно пользоваться и методом s1[i], s2[i] и методом *(s1+i), *(s2+i).

Например выведем «Я люблю» из s1 и s2:

На экране будет

putchar(‘\n’); // переход строки

Я люблю

Я люблю

for (i=0; i<=6; i++)

putchar(s1[i]);

putchar(‘\n’);

for (i=0; i<=6; i++)

putchar(s2[i]);

Сделаем то же самое другим способом:

На экране будет тоже

putchar(‘\n’); // переход строки

Я люблю

Я люблю

for (i=0; i<=6; i++)

putchar(*(s1+i));

putchar(‘\n’);

for (i=0; i<=6; i++)

putchar(*(s2+i));

Различие:

Операцию «++» можно применять только к указателям:

while (*(s2)!=’\0’) // пока не конец строки

putchar(*(s2++)); // печать символа и увеличение указателя на 1 байт

Я люблю собак!

Будет выведено:

*s2 – переменная указатель. Раньше она указывала на константу «Я люблю собак!».

Её можно изменить присвоив этой переменной адрес массива s1: s2=s1;

Теперь s2 указывает на строку «Я люблю кошек!»

Массивы строк

Сравним массив указателей на char *fruct и массив символов fruct

static char fruct[3][7] = {“Дыня”,”Груша”,”Персик”}

0

Д

Ы

Н

Я

\0

\0

\0

\0

1

Г

Р

У

Ш

А

\0

\0

\0

2

П

Е

Р

С

И

К

\0

\0

0

1

2

3

4

5

6

7

Это массив [3] символьных массивов [7], т.е. масив значений типа char содержащий 3 символьных массива

Эти значения можно менять

Занимает 21 байт


static char *fruct[3]= {“Дыня”,”Груша”,”Персик”}

Д

Ы

Н

Я

\0

Г

Р

У

Ш

А

\0

П

Е

Р

С

И

К

\0

Это массив указателей char.

Содержит 3 адреса.

Эти сроковые константы нельзя изменить

занимает 5+6+7=18 байт


Функции с для обработки строк

(описаны в заголовочном файле string.h)

strlen() - определение длины строки

strcat() – объеденение строк

strncat() - объеденение строк, а также sprintf (stdio.h)

strcmp() – сравнивание строк

strncmp() - сравнивание строк

strcpy() – копирование строк

strncpy() – копирование строк

другие функции – кратко.

  1. strlen(). Определяет длину строки (фактическую, не включая \0)

Например, усечем строку str до указанной длины 13 с помощью функции fit

в программе проверки усечения строк:

#include <stdio.h>

#include <string.h> // для строковых функций

void fit(char *str1, unsigned int n1);

int main(void)

{ char str[]=”Держите шляпы, хакеры!”;

puts(str) ;

fit(str,13);

puts(str);

return 0;

}

void fit(char *str1, unsigned int n1)

{ if (strlen(str1)>n1) str1[n1]=’\0’; // в 13 элемент масива записывается конец с

// или: *(str+n1)=’\0’

}

Держите шляпы, хакеры!

Держите шляпы

Будет выведено: