Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prog (2).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
75.68 Кб
Скачать

24.Функции работы со строками: назначение, синтаксис, примеры

использования.

Для лексикографического сравнения строк используются функции int strcmp(строка1, строка2) и int stricmp(строка1, строка2). Первая сравнивает строки с учетом регистра, вторая – без. Все это относится только к латинице. Пример использования функции сравнения строк:

char s[80];

printf("Введите пароль: ");

gets(s);

if(strcmp(s, "pass"))

printf("Неверный пароль\n");

Для вычисления длины строки используется функция strlen (строка). Функция возвращает длину строки за вычетом нулевого байта. Эта функция полезна в случаях, если вам нужно последовательно обратиться ко всем символам строки, не нарушив при этом ее длину. Пример:

char len;

len=strlen(str);

for (i=0;i<len;i++) {

// работа со строкой, не изменяющая ее длину

}

Зачастую требуется преобразовать число в строку и наоборот. Есть несколько способов сделать это.

1) использовать функции sprintf и sscanf. Например, так:

char str[50];

int i=15;

int j;

sprintf(str, "%d", i); // Записать в str строковое представление i

sscanf(str, "%d", &j); // Записать в j число, содержащееся в строке str

sprintf(str, "i=%d and j=%d", i, j);

// содержимое str: "i=15 and j=15"

Функция int sprintf(строка, формат, [аргументы]) работает аналогично printf(), но выводит отформатированное содержимое не на экран, а в строку, указанную в качестве первого аргумента. Функция возвращает значение, равное числу символов, записанных в строку. Пример:

char buffer [50];

int n, a=5, b=3;

n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);

printf ("[%s] is a %d char long string\n",buffer,n);

Функция int sscanf(строка, формат, [аргументы]) осуществляет считывание данных из строки и запись в аргументы в соответствии с форматом. Как и в обычной функции scanf(), перед аргументами ставится &.

Хотя sprintf и sscanf довольно удобны, у них есть несколько недостатков. Во-первых, они не всегда быстро работают, во-вторых не типобезопасны. Например, если в строке формата вы укажите, что передаете два целых, а вместо этого передадите два double, ошибка обнаружится только при выполнении программы и найти ее причину будет не так-то просто.

В-третьих, доступно целое семейство функций atof, atoi, atol и itoa, ltoa. Все они очень похоже между собой. Функции из первой группы преобразуют строку в число (float, int или long) в зависимости от окончания. Функции из второй группы выполняют обратное преобразование.

Пример (первый аргумент функции – число, второй аргумент – строка, третий аргумент – основание системы счисления):

char str1[5];

char str2[5];

char str3[5];

itoa(12, str1, 10); //str1=”12”

itoa(12, str1, 16); //str1=”C”

itoa(12, str1, 2); //str1=”1100”

strupr(строка) – преобразует строку в верхний регистр

strlwr(строка) – преобразует строку в верхний регистр

strlen(строка) – возвращает длину строки

strset(строка,символ) – заменяет все символы строки на указанный символ

strrev(строка) – меняет порядок символов в строке на противоположный*

char title[]="C++ strings";

cout << strupr(title) << endl;

cout << strlwr(title) << endl;

cout << strlen(title) << endl;

cout << strrev(title) << endl;

cout << strset(title,'x') << endl;

25.Указатель. Синтаксис объявления указателя. Способы инициализации указателей. Примеры. Указатель – это переменная, в которой хранится адрес области памяти.

Синтаксис объявления указателя на объект:

тип *имя_указателя;

* относится непосредственно к имени, поэтому ее требуется ставить перед именем каждого указателя в объявлении.

Инициализация указателя:

  1. Присваиваем указателю адрес с помощью операции взятия адреса &;

char *pch = &ch; // заносим в pch адрес ch

int *pi = &i;

float *pf = &f;

double *pd = &d;

  1. Присваиваем указателю значение другого инициализированного указателя;

int i = 10;

int *pi1 = &i; // pi1 указывает на i

int *pi2 = pi1; // pi2 тоже указывает на i

  1. Присваиваем имя массива (оно трактуется как адрес начала массива)

int arr[3]={1,2,3};

int *parr = arr; // обратите внимание, что в этом случае не используется оператор взятия адреса &

  1. Присваиваем адрес области памяти в явном виде;

char * pch = (char*)0xB8000000;

  1. Присваиваем пустое значение.

double *pd = NULL;

float *pf = 0;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]