![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Тема 9. Строки
Строка это, по сути, массив символов. Вот пример: char str[] = " Это просто строка"; Эту же строчку для большего понимания можно записать вот так: char str[] = {'Э', 'т', 'о', ' ', 'п', 'р', 'о', 'с', 'т', 'о', '', 'с', 'т', 'р', 'о', 'к', 'а'}; Т.е. все тот же массив, только состоящий уже из символов. Поэтому работать с ним можно, так же как и с целочисленными массивами. Вот пример и его решение: требуется перевести введенное слово в верхний регистр: #include < conio.h> #include < stdio.h> int main() { char str[] = " hello"; for (int i=0; str[i]! = '\0'; i++){ str[i] -= 32; } for (int i=0; str[i]! = '\0'; i++){ printf (" %c", str[i]); } getch(); return 0; } для получения кода числа просто воспользуйтесь в функции printf спецификатором %d. Да, и еще один важный момент: окончанием любой строки является нуль-терминатор, который обозначается специальным символом - '\0'. Еще одним способом указания строки является объявление ее через char*. Вот пример: char *str = " provod"; Т.е. создается указатель на строку, который располагается где-то в памяти. А вот как можно вводить строки через, нам уже родной, опертаор scanf: char str[16]; scanf(" %s", str); Тут две тонкости: знак взятия адреса тут не нужен, так как имя массива и является адресом Длина вводимой строки не должна превышать 15 символов, так как последним обязательно должен быть нуль-терминатор. Причем компилятор сам заполнит этот символ после последнего введенного вашего символа. Так как язык Си является языком структурным, то существуют уже встроенные функции для работы со строками и с символами. Для обработки строк вам понадобится подключить файл: ctype.h. Файл содержит функции определения регистра, формата символов. Иногда вам может понадобиться перевести строку в другой тип данных. Для перевода строк в другие типы существует библиотека stdlib. Вот ее функции: int atoi (char *str) long atol (char *str) double atof (char *str) Иногда эти функции очень помогают, например, когда надо извлечь из строки год или цифровое значение. Функции работы со строками c библиотека stdio.h, которая содержит функции работы со строками: int getchar() - возвращает значение символа, введенного вами с клавиатуры. А вот и вывод этого числа: printf(" %d", getchar()); char *gets (char *s) функция просит вводить пользователя строку, которую она помещает в массив s, пока пользователь не нажмет 'Enter': char str[7] = " "; gets(str); int putchar (int c) печатает символ, который имеет код 'c': putchar(97); //напечатает символ а int puts (char *s) печатает строку s и переводит курсор на новую строку: char str[7] = " sergey"; puts(str); int sprintf (char *s, char *format,...) Выполняет тоже, что и функция printf, за тем исключением, что записывает данные в массив s: char str[37] = " "; sprintf (str, " chislo: %d, month: %s", 10, " desember"); //В массиве будет: chislo: 10, month: desember int sscanf (char *s, char *format,...) происходит ввод значений не с клавиатуры, а из массива s: char str[37] = " sergey", s[100]=" "; sscanf (str, " %s", s); string.h Большинство функций работы со строками содержится в библиотеке string.h
Функция strlen (S1) возвращает длину строки S1, исключая нулевой символ.
char *strcpy (char *srt1, char str2) Копирует строку str2 в строку str1, возвращаемым значением этой функции является новая, полученная строка str1 char str[37] = " hello", s[100]="!!! "; strcpy(str, s); char *strncpy (char *srt1, char str2, int n) эта функция делает все тоже самое, что и предыдущая, за исключением того, что тут возможен контроль количества копируемых символов: char str[37] = "!!! ", s[100]=" privet"; strncpy(str, s, 3); //ответ: pri!!! char *strcat (char *srt1, char str2) Функция добавляет в строку str1 строку str2. Т.е. на место нуль-терминатора в строке str1, вставляется строка str2: char str[37] = " hello", s[100]="!!! "; strcat(str, s); //Ответ: Hello!!! char *strncat (char *srt1, char str2, int n) Добавляет к первой строке ровно n символов из второй строки char str[37] = " hello", s[100]="!!! "; strncat(str, s, 2); //ответ: hello!!
Сравнение строк производится функцией strcmp в библиотеке string.h int strcmp(const char *str1, const char *str2); Функция strcmp() сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения: меньше нуля, если str1 меньше str2; нуль, если str1 равен str2; больше нуля, если str1 больше str2.
Эту функцию можно использовать для проверки пароля. В случае неверного значения она возвращает нуль, а при совпадении — единицу.
int password(void) { char s[80];
printf(“Введите пароль: ”); gets(s);
if(strcmp(s, “pass”)) { printf(“Неверный пароль\n”); return 0; } return 1; }
|