Правила записи программы на языке Си 5 Правила формального описания синтаксиса языка программирования 6
Вид материала | Лекции |
Содержание12.2.Функции обработки строк. 12.3.Функции распознавания вида символа 12.4.Функции преобразования данных |
- Правила преобразований из одного типа в другой и правила приведения типов в языке Object, 19.03kb.
- Оформление программы на языке Паскаль. Оператор вывода. Описание переменных. Оператор, 186.34kb.
- Программа наименование дисциплины Латинский язык (1,2 уровни), 154.48kb.
- Экзаменационные вопросы по курсу "Методы программирования", 32.44kb.
- Вопросы по курсу Программирование на языке высокого уровня (яву), 102.97kb.
- Структура программы в языке программирования С++. Обмен данными между функциями (параметры, 37.24kb.
- Программа курса " Азы программирования", 26.19kb.
- Структура программы языка Турбо Паскаль Программа на языке Турбо Паскаль имеет вид, 792.5kb.
- Эволюция языков программирования, 493.92kb.
- Структура программы на языке Turbo Pascal, 26.15kb.
12.2.Функции обработки строк.
Определение длины строки
int strlen(char *str);
Символ '\0' в длину строки не входит. Не путать с длиной массива, в котором размещается строка.
Слияние двух строк
char *strcat(char *dest, char *src);
К строке, на которую указывает dest приписываются все символы строки src. Буфер, в котором размещается строка dest должен быть такого размера, чтобы вместить результирующую строку.
Функция возвращает адрес строки dest.
Слияние строки dest с частью строки src
char *strneat(char *dest, char src, int n);
К строке, на которую указывает dest приписываются n символов строки src. Буфер, в котором размещается строка dest должен быть такого размера, чтобы вместить результирующую строку. Функция возвращает адрес строки dest.
Функция сравнения двух строк в алфавитном порядке
int strcmp(char *s1, char *s2);
Функция возвращает значение больше нуля, если строка s1 больше s2 в смысле алфавитного порядка, меньше нуля, если строка s1 меньше s2, и равное нулю, если строки равны.
Функция сравнения части строк
int strncmp(char *s1, char *s2, int n);
Работает также как strcmp(), но сравнивает только n символов строк.
Функция копирования строки
char *strcpy(char *dest, char src);
Строка, на которую указывает src, копируется в буфер, на который указывает dest. Этот буфер должен быть такого размера, чтобы вместить копируемую строку. Функция возвращает адрес строки dest.
Функция копирования части строки
char *strncpy(char *dest, char src, int n);
Часть строки, на которую указывает src, размером n символов копируется в буфер, на который указывает dest. Этот буфер должен быть такого размера, чтобы вместить копируемую строку. Функция возвращает адрес строки dest.
Поиск символа в строке
char *strchr(char *str, char c);
Функция осуществляет поиск символа c с начала строки, на которую указывает str, и возвращает адрес найденного символа. Если символ не найден возвращает NULL.
Поиск символа с конца строки
char *strrchr(char *s, char c);
Функция осуществляет поиск символа c с конца строки, на которую указывает str, и возвращает адрес найденного символа. Если символ не найден возвращает NULL.
Форматный вывод в строку
int sprintf(char *str, char *format, ...);
Функция работает подобно printf(), но вывод вместо консоли осуществляет в буфер, на который указывает str. Его размер должен быть достаточным для того, чтобы вместить всю выводимую информацию. Функция возвращает число выведенных байт.
Форматный ввод из строки
int sscanf(char *str, char *format, ...);
Функция работает подобно scanf(), но ввод вместо клавиатуры осуществляет из буфера, на который указывает str. Функция возвращает число успешно прочитанных полей данных.
Используя последнюю функцию можно разработать программу для ввода массива данных, заканчивающегося ключевым словом. Фрагмент такой программы приведен ниже
#include
#include
void main(void)
{
int a[1000]; char buf[81]; int n, goodIO;
for( goodIO = n = 0; n < 1000; n++ )
{
printf("a[%d]=", n); scanf("%s", buf);
if( strcmp(buf, "end") == 0) { goodIO = 1; break; }
sscanf (buf, "%d", &a[n]);
}
if( goodIO )
{
/* ... обработка */
}
}
12.3.Функции распознавания вида символа
Строго говоря, это не функции, а макроопределения, описанные в заголовочном файле
isalnum(c) истина если c буква или цифра;
isalpha(c) истина если c буква;
isdigit(c) истина если c цифра;
iscntrl(c) истина если c символ удаления или обычный уп-
равляющий символ;
isprint(c) истина если c печатный символ;
islower(c) истина если c буква нижнего регистра;
isupper(c) истина если c буква верхнего регистра;
ispunct(c) истина если c знак пунктуации;
isspace(c) истина если c пробел, знак табуляции, возврат
каретки, символ перевода строки, вертикальной
табуляции, перевода страницы;
isxdigit(c) истина если c шестнадцатеричная цифра;
_toupper(c) преобразует c из диапазона [a-z] к символам
[A-Z];
_tolower(c) преобразует c из диапазона [A-Z] к символам
[a-z];
_toascii(c) преобразует c больший, чем 127 к диапазону
0-127 путем очистки всех битов, кроме 7 млад-
ших.
12.4.Функции преобразования данных
Прототипы функций преобразования данных находятся в файле
Преобразование строки символов в целое число:
int atoi(const char *s);
long atol(const char *s);
Возвращает преобразованное значение входной строки. Если строка не может быть преобразована возвращает ноль.
Преобразование строки символов в вещественное число:
double atof(const char *s);
Возвращает преобразованное значение входной строки. Если строка не может быть преобразована возвращает ноль.
Преобразование строки символов в длинное целое число с указанием системы счисления:
long strtol(const char *s, char **endptr, int radix);
unsigned long strtoul(const char *s, char **endptr,
int radix);
Возвращает преобразованное значение входной строки. Если строка не может быть преобразована возвращает ноль. Указатель *endptr устанавливается на первый символ строки не отвечающий синтаксису целого числа языка СИ.
Преобразование строки символов в вещественное число:
double strtod(const char *s, char **endptr);
Возвращает преобразованное значение входной строки. Если строка не может быть преобразована возвращает ноль. Указатель *endptr устанавливается на первый символ строки не отвечающий синтаксису вещественного числа языка СИ.
Преобразование целого числа в строку символов с указанием системы счисления:
char *ltoa(long value, char *string, int radix);
char *itoa(int value, char *string, int radix);
char *ultoa(unsigned long value, char *string,
int radix);
Возвращает указатель на выходную строку.
Преобразование вещественного числа в строку символов:
char *ectv(double value, int ndig, int *dec, int *sign);
char *fctv(double value, int ndig, int *dec, int *sign);
Функции возвращают указатель на статический буфер памяти с выходной строкой, содержащей только цифры числа. Буфер обновляется при каждом вызове функции. Для функции ectv() ndig является числом цифр в выходной строке, для fctv() - числом цифр в выходной строке после десятичной точки. Параметр dec показывает положение десятичной точки в выходной строке, которая явно не присутствует. Параметр sign принимает отличное от нуля значение для отрицательных чисел.
Преобразование вещественного числа в строку:
char *gctv(double value, int ndec, char *buf);
Функции возвращают указатель на буфер buf памяти с выходной строкой, содержащей готовое к печати символьное представление числа из ndec цифр в формате F Фортрана, если возможно. В противном случае число будет представлено в формате e функции printf().