
- •2. Программа. Обзор существующих парадигм программирования.
- •6. Операторы инкремента и декремента. Побитовые операторы языка
- •7. Операторы присваивания. Условный оператор. Оператор sizeof.
- •12. Инструкции break и continue
- •18.Функция. Объявление и определение функции: назначение,
- •19. Функция. Возврат значения из функции: синтаксис, пример.
- •22. Символьный тип: размер, диапазон. Связь символа и ascii-кода.
- •23.Символьные строки. Null-символ. Ввод и вывод символьных
- •24.Функции работы со строками: назначение, синтаксис, примеры
- •26.Разыменование указателей. Арифметические операции над указателями. Связь указателей и массивов. Примеры.
- •27.Указатели как аргументы функций. Массивы указателей.
- •28.Указатель на константу, константный указатель на переменную,
- •30.Структуры, объединения, перечисления.
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.Указатель. Синтаксис объявления указателя. Способы инициализации указателей. Примеры. Указатель – это переменная, в которой хранится адрес области памяти.
Синтаксис объявления указателя на объект:
тип *имя_указателя;
* относится непосредственно к имени, поэтому ее требуется ставить перед именем каждого указателя в объявлении.
Инициализация указателя:
Присваиваем указателю адрес с помощью операции взятия адреса &;
char *pch = &ch; // заносим в pch адрес ch
int *pi = &i;
float *pf = &f;
double *pd = &d;
Присваиваем указателю значение другого инициализированного указателя;
int i = 10;
int *pi1 = &i; // pi1 указывает на i
int *pi2 = pi1; // pi2 тоже указывает на i
Присваиваем имя массива (оно трактуется как адрес начала массива)
int arr[3]={1,2,3};
int *parr = arr; // обратите внимание, что в этом случае не используется оператор взятия адреса &
Присваиваем адрес области памяти в явном виде;
char * pch = (char*)0xB8000000;
Присваиваем пустое значение.
double *pd = NULL;
float *pf = 0;