Функции работы со строками и символами

Строка представляет собой массив символов, заканчивающийся нуль-символом. В С++ есть две возможности работы со строками: функции, унаследованные из библиотеки С (заголовочный файл <string.h> или <cstring>), и библиотечный класс С++ string, предоставляющий более широкие возможности представления, обработки и контроля строк.

Библиотека С содержит функции копирования строк (strcpy, strncpy), сравнения (stpcmp, strncmp), объединения строк (strcat, strncat), поиска подстроки (strstr), поиска вхождения символа (strchr, strrchr, strpbrk), определения длины строки (strlen) и другие.

В заголовочных файлах <stdlib.h> и <cstdlib> содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помощью функции sprintf):

 

double atof(const char* p) преобразует переданную строку в double;

int atoi(const char* p) преобразует переданную строку в int;

long atol(const char* p) преобразует переданную строку в long.

 

Пробелы и табуляции в начале строки пропускаются. Преобразование прекращается при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазона данного типа, переменной errno (заголовочный файл <cerrno>) присваивается значение ERANGE и возвращается допустимое число.

Пример (программа заполняет массив типа double из строки):

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int main(){

char s[] = "2, 38.5, 70, 0, 0, 1", *p = s;

double m[10];

int i = 0;

do{

m[i++] = atof(p);

if (i>9)break;

}while(p = strchr(p, ','), p++);

for(int k = 0; k<i; k++) printf("%5.2f ", m[k]);

return 0;

}

 

Кроме описанных выше, в библиотеке есть функции tolower и toupper, переводящие символ латинского алфавита соответственно в нижний и верхний регистр. Для каждой из перечисленных функций есть ее аналог для многобайтных символов типа wchar_t, содержащий в названии букву w.

Математические функции

С++ унаследовал из С стандартные математические функции, описание которых находится в заголовочных файлах <math.h> (<cmath>). Они позволяют получить абсолютное значение (abs, fabs), округленное число (ceil, floor), квадратный корень (sqrt), степень (pow), значения тригонометрических функций (sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, atan2), экспоненту (exp), логарифм (log, log10), дробную и целую части числа (modf), остаток от деления (fmod) и другие.

Ошибки индицируются установкой errno из <errno.h> (<cerrno>) в значение EDOM для ошибок, связанных с выходом из области определения, и ERANGE для ошибок выхода за пределы диапазона.

 


[1] Блоком в языке C++ считается последовательность операторов, заключенная в фигурные скобки { }


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: