Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример использования функции strftime
Работа со строковыми функциями. Сравнение содержимого двух строк. Поиск в строке одного из нескольких символов. Первое вхождение одного символа в строке. Определение длины строки. Нахождение одной строки внутри другой. Приведение символов к верхнему регистру.
специальный класс string (в методичках Белодеда по-другому, поэтому это только для ознакомления и на всякий случай)
Для его работы необходимо в начале программы подключить заголовочный файл string:
#include < string>
Для создания строки вам необходимо в начале программы написать using namespace std;
Теперь чтоб создать строку достаточно написать:
string s;
Для записи в строку можно использовать оператор =
s=" Hello";
Пример работы с классом string:
string name;
cout< < " Enter your name" < < endl;
cin> > name;
cout< < " Hi " < < s< < "! " < < endl;
- s.compare(str) -сравнивает строку s со строкой str и возвращает 0 в случае совпадение (на самом деле сравнивает коды символов и возвращает их разность)
- s.find(str, позиция) - ищет строку str начиная с заданной позиции
- s.insert(позиция, str, начиная, beg, count) - вставляет в строку s начиная с заданной позиции часть строки str начиная с позиции beg и вставляя count символов
- int len=s.length() - записывает в len длинну строки
- s.size() - возвращает число элементов в строке.
- s.find(str, позиция) - ищет строку str начиная с заданной позиции
- int i=s.begin() - записывает в i индекс первого элемента строки
- s.insert(позиция, str, начиная, beg, count) - вставляет в строку s начиная с заданной позиции часть строки str начиная с позиции beg и вставляя count символов
ПРИМЕР
string name, surname, text, fullname, s1, s2, s3, user; user=" Petya Petrov"; cout< < " Enter your name" < < endl; cin> > name; cout< < " Enter your surname" < < endl; cin> > surname; fullname=name; fullname+=" "; // добавляем пробелfullname.append(surname); if (fullname.compare(user)==0) // < => if (! (fullname.compare(user)))cout< < " Your are good user" < < endl; elsecout< < " Bad user" < < endl; cout< < " enter s1" < < endl; cin> > s1; cout< < " enter s2" < < endl; cin> > s2; s1.swap(s2); cout< " new s1: " < < s1< < endl< < " new s2: " < < s2< < endl; cout< < " Enter big text with your name" < < endl; cin> > text; int i=0; i=text.find(" name"); while (i! =-1){text.replace(i, name.length(), name); s3=text.substr(i, name.length()); cout< < " Replaced: " < < s3< < endl; i=text.find(" name"); }cout< < " New text: " < < endl< < text< < endl; text.clear(); cout< < " text: " < < text< < endl; Тут другие функции (Как в методичке Белодеда) Макрос или функция
| Действие
| memcmp()
#include < string.h>
int memcmp(const void *buf1, const void *buf2, size_t count);
| Сравнивает n символов из буферов buf1 и buf2
Функция memcmp() сравнивает первые count символов массивов, адресуемых параметрами buf1 и buf2.
Функция memcmp() возвращает целое значение, которое интерпретируется следующим образом.
Меньше нуля
| buf1 меньше buf2
| Нуль
| buf1 равен buf2
| Больше нуля
| buf1 больше buf2
| Данная программа выдает результат сравнения двух своих аргументов, которые задаются в командной строке.
#include < stdio.h>
#include < string.h>
#include < stdlib.h>
int main(int argc, char *argv[])
{
int outcome, len, l1, l2;
if(argc! =3) {
printf(" Неверно задано число аргументов.");
exit(1);
}
/* определение длины более короткой строки */
l1 = strlen(argv[1]);
l2 = strlen(argv[2]);
len = l1 < l2? l1: l2;
outcome = memcmp(argv[1], argv[2], len);
if(! outcome) printf(" Равны");
else if(outcome< 0) printf(" Первый меньше второго.");
else printf(" Первый больше второго.");
return 0;
}
| memcpy()
void * memcpy(void * destptr, const void * srcptr, size_t num);
| Копирует n символов из источника в приемник
Функция memcpy копирует num байтов первого блока памяти, на который ссылается указатель srcptr, во второй блок памяти, на который ссылается указатель destptr.
//пример использования функции memcpy
#include < iostream>
#include < cstring>
int main()
{ char str1[] = " Пример строки";
char str2[40]; char str3[60];
memcpy (str2, str1, strlen(str1)+1); // копируем строку str1 и сохраняем в str2
memcpy (str3, " Копирование успешно выполнено", 60); // копируем 60 байт строки и сохраняем в str3
std:: cout < < " str1: " < < str1
< < " nstr2: " < < str2
< < " nstr3: " < < str3 < < std:: endl;
return 0; } Результат:
str1: Пример строки str2: Пример строки str3: Копирование успешно выполнено
| strcat()
char * strncat(char * destptr, char * srcptr, size_t num);
| Присоединяет строку к концу другой строки
Функция добавляет первые num символов строки srcptr к концу строки destptr, плюс символ конца строки. Если строка srcptr больше чем количество копируемых символов num, то после скопированных символов неявно добавляется символ конца строки.
Возвращаемое значение: Указатель на строку с результатом конкатенации.
//пример использования функции strncat
#include < iostream>
#include < cstring>
int main()
{
char str1[40];
char str2[40];
strcpy (str1, " Быть "); // скопировать строку " Быть" в str1
strcpy (str2, " или не быть"); // скопировать " или не" и добавить к строке str2
strncat (str1, str2, 11); // объединить строки str1 и str2
std:: cout < < str1 < < std:: endl;
return 0; }
Результат: Быть или не
| strcpy()
char * strcpy(char * destptr, const char * srcptr);
| Копирует содержимое строки в другую строку
Функция копирует Си-строку srcptr, включая завершающий нулевой символ в строку назначения, на которую ссылается указатель destptr. Чтобы избежать переполнения, строка, на которую указывает destptr должна быть достаточно длинной, чтобы в неё поместилась копируемая строка (включая завершающий нулевой символ). Копируемая строка и строка назначения не должны перекрываться в памяти.
//пример использования функции strcpy
#include < iostream>
#include < cstring>
int main()
{char str1[] = " Я программист";
char str2[40];
char str3[80];
strcpy (str2, str1); // копируем строку str1 в str2
strcpy (str3, " копирование выполнено успешно\n"); // копируем строку во втором параметре в str3
std:: cout < < " str1: " < < str1
< < " \nstr2: " < < str2
< < " \nstr3: " < < str3;
return 0; }
Результат:
str1: Я программист str2: Я программист str3: копирование выполнено успешно
| strlen()
size_t strlen(const char * string);
| Вычисляет длину строки
Длина Си-строки определяется по достижению нулевого символа - нуль терминатор. Функция strlen видит начало Си-строки и начинает сначала считать количество символов (байтов, отводимых под каждый символ), этот процесс выполняется до тех пор, пока не будет достигнут завершающий нулевой символ. Обратите внимание на то, что завершающий нулевой символ не входит в длину строки. Он является служебным символом, для обозначения завершения Си-строки.
Не путайте размер массива, который содержит строку и длину строки. Например: char string[100] = " строка"; Таким образом, если выполнится оператор sizeof(string), ответ будет 100, а если — функция strlen(string), ответ 6.
//пример использования функции strlen
#include < iostream>
#include < cstring> // для strlen
int main()
{ char input[256];
std:: cout < < " Введите строку: ";
std:: cin > > input;
std:: cout < < " Строка " < < input < < " содержит " < < strlen(input) < < " символов\n";
return 0; }
Результат: Введите строку: Созвездие Персея Строка Созвездие содержит 18 символов
| 54. Математические функции (math.h). Построение таблицы значений тригонометрических функций. Функции, объявленные в math.h, позволяют проделывать разнообразные арифметические, алгебраические и тригонометрические операции.
Функция
| Результат
| int abs(int x)
| Абсолютное значение
| double pow(double x, double y)
| x в степени у
| double sine(double x)
| Синус
| double sqrt(double x)
| Квадратный корень
| double tan(double x)
| Тангенс
| Использование математических функций будет понятным и простым для тех, кто знаком с соответствующими понятиями алгебры и тригонометрии. Многие из этих функций уже использовались ранее. При использовании тригонометрических функций следует помнить, что значения углов всегда выражены в радианах. Некоторые математические функции приведены в таблице.
sin(x) синус x
cos(x) косинус x
tan(x) тангенс x
asin(x) арксинус x в диапазоне [–p/2, p/2], x О [–1, 1]
acos(x) арккосинус x в диапазоне [0, p], x О [–1, 1]
atan(x) арктангенс x в диапазоне [–p/2, p/2]
atan2(y, x) арктангенс y/x в диапазоне [–p, p]
sinh(x) гиперболический синус x
cosh(x) гиперболический косинус x
tanh(x) гиперболический тангенс x
exp(x) экспоненциальная функция ex
log(x) натуральный логарифм ln(x), x > 0
log10(x) десятичный логарифм lg(x), x > 0
pow(x, y) xy, ошибка области, если x = 0 или y < = 0 или x < 0 и y — не целое
sqrt(x) Цx, x > = 0
ceil(x) наименьшее целое в виде double, которое не меньше x
floor(x) наибольшее целое в виде double, которое не больше x
fabs(x) абсолютное значение |x|
ldexp(x, n) x * 2n
frexp(x, int *еxр) разбивает x на два сомножителя, первый из которых — нормализованная дробь в интервале [1/2, 1), которая возвращается, а второй — степень двойки, эта степень запоминается в *exp. Если x — нуль, то обе части результата равны нулю
modf(x, double *ip) разбивает x на целую и дробную части, обе имеют тот же знак, что и x. Целая часть запоминается в *ip, дробная часть выдается как результат
fmod(x, y) остаток от деления x на y в виде числа с плавающей точкой. Знак результата совпадает со знаком x. Если y равен нулю, результат зависит от реализации
Заголовок функции
| Назначение
| Пример вызова
| int abs(int x); long labs(long x) double fabs(double x)
| Модуль (значение без знака) для целого, длинного и вещественного аргументов
|
int a; long b; float c;
float d = abs(a)*labs(b)/fabs(c);
| double ceil(double x)
| Наименьшее целое, не меньшее x, т.е. фактически округление до целого вверх.
|
x = ceil(1.7/0.5); // x=4
| double floor(double x)
| Наибольшее целое, не большее х, т.е. округление до целого вниз
|
x = floor(1.7/0.5); // x=3
| double sqrt(double x)
| Квадратный корень из аргумента. Если аргумент окажется отрицательным, программа выдаст ошибку " Divide error" (ошибка деления).
|
float d=sqrt(S)*sqrt(2); // диагональ квадрата по площади
| double pow(double x, double y) double pow10(double x)
| Функция pow возводит x в степень y, при этом, как видно, и основание, и показатель степени вещественные. pow10 возводит 10 в степень х.
|
x = pow(1.3, -2.5); // x~=0.519
| double cos(double x) double sin(double x) double tan(double x)
| Тригонометрические функции косинус, синус и тангенс. Угол х для всех этих функций задается в радианах. Для перевода радиан в более привычные пользователю градусы и обратно используются формулы:
x = 180*n/M_PI; // радианы в градусы
n = M_PI*x/180; // градусы в радианы
где M_PI - константа, определенная в библиотеке math - число Пи типа double.
|
// a, b - катеты; с - гипотенуза
alpha *= M_PI/180; // преобразуем в радианы
a = c*sin(alpha);
b = c*cos(alpha);
| double acos(double x) double asin(double x) double atan(double x) double atan2(double x, double y)
| Обратные тригонометрические функции арккосинус, арксинус, арктангенс числа x. Результат возвращается в радианах. При этом функция atan2 возвращает арктангенс частного y/x.
|
alpha = asin(a/c); // угол по катету и гипотенузе
| Распечатать таблицу чисел, значения их квадратов и квадратных корней. Программа должна выровнять столбцы, дополнить их пробелами, заполнить пробелы нулями и установить точность.
#include < iostream>
#include < math.h>
using namespace std;
void main()
{
float i, a, b;
setlocale(LC_ALL, " Russian");
cout< < " Введите диапазон чисел от: ";
cin> > a;
cout< < " и до: ";
cin> > b;
for(i=a; i< b; i++)
{
cout.width(8); //задаем ширину поля
cout.setf(ios:: left); //выравниваем по левому краю
cout.fill ('0'); // символ заполнения
cout< < " число: " < < i< < " \t"; //выравниваем по левому краю
cout.width(18); //задаем ширину поля
cout.setf(ios:: left); //выравниваем по левому краю
cout.fill ('0'); // символ заполнения
cout< < " квадрат числа: " < < i*i< < " \t";
cout.width(28); //задаем ширину поля
cout.setf(ios:: left); //выравниваем по левому краю
cout.fill ('0'); // символ заполнения
cout.precision(4); //задаём точность
cout< < " квадратный корень числа: " < < sqrt(i)< < endl;
}
}
55. Функции для работы с датой и временем. Структуры для представления даты/времени и параметры функций. Работа с функциями localtime() и asctlme(). Работа с функциями gmtime() и asctime(). Работа с функцией strftime(). Работа с функцией ctime(). В следующей таблице приведены некоторые функции, объявленные в time.h.
Функция
| Действие
| ctime()
char * ctime(const time_t * timeptr);
| Преобразует дату и время в строку
Функция преобразует значение типа time_t в Си-строку, которая содержит дату и время в человеко-понятном формате.
Возвращаемая строка имеет следующий формат: Www Ммм дд чч: мм: сс гггг
В конце строки стоят символы новой строки \n и завершающий нулевой символ \0.
Эта функция эквивалентна asctime, единственное их отличие — передаваемый параметр.
| difftime()
double difftime(time_t timeend, time_t timestart);
| Вычисляет интервал времени
Вычисляет разность в секундах между timestart и timeend в секундах типа double.
| localtime()
struct tm * localtime(const time_t * timeptr);
| Преобразует дату и время в структуру tm, содержащую информацию о текущем времени.
Функция преобразовывает текущее значение времени, передаваемое как аргумент, через указатель timeptr на time_t в структуру tm. Время указанное в timeptr используется для заполнения структуры tm значениями текущей даты и времени.
| asctime()
char * asctime(const struct tm * tmptr);
| Функция преобразует содержимое структуры tm (календарное время) в Си-строку, которая содержит дату и время в понятной для человека форме. Возвращаемая строка имеет следующий формат:
Ннн Ммм дд чч: мм: сс гггг, где:
| gmtime()
struct tm * gmtime(const time_t * timeptr);
| Функция принимает значение времени в качестве аргумента через указатель timeptr на time_t, чтобы заполнить элемент-члены структуры tm, дату и время в формате GMT. Указатель на заполненную структуру tm информацией о времени.
Структура tm статическая и предоставляется функциям gmtime и localtime.
| strftime()
size_t strftime(char * stringptr, size_t maxnum, const char * strformat, const struct tm * timeptr);
| Форматирует дату и время для вывода
Из структуры tm извлекаются необходимые значения даты и времени и помещаются в строку strformat, где и подвергаются форматированию с помощью спецификаторов формата. Предварительно отформатированное содержимое строки strformat копируется в строку stringptr, размер копируемой строки ограничивается по количеству символов в параметре maxnum.
Если размер копируемой Cи-строки меньше или равен значению в maxnum, включая завершающий нулевой символ, то функция вернет общее количество копируемых символов (не учитывая завершающий нуль-символ). В противном случае возвращается ноль и содержимое строки не определено.
| time()
time_t time(time_t * timeptr);
| Возвращает текущее время (системное)
Функция возвращает текущее календарное значение времени в секундах. Если аргумент не является нулевым указателем, ей передается значение времени типа time_t.
|
Многие из функций, перечисленных в предыдущем разделе, используют структуру tm, описанную в файле time.h. Структура tm содержит значения даты и времени, все значения хранятся в отдельных полях. Структура состоит из девяти полей типа int:
int tm_sec; // секунды
int tm_min; // минуты
int tm_hour; // часы
int tm_mday; // дни
int tm_mon; // месяца
int tm_year; // года
int tm_wday; // дни недели
int tm_yday; // дней в году
int tm_isdst; // флаг летнего времениВ прикладной программе зачастую приходится использовать значение текущей даты и времени. Следующая программа работает с этими значениями посредством функций localtime() и asctime().
//19TIME.CPP
//Эта программа отображает текущую дату и время
#include < iomanip>
#include < time.h>
using namespace std;
struct tm *date_time;
time_t timer;
main()
{
time(& timer);
date_time = localtime(& timer);
printf(" The present date and time is: %s\n", asctime(date_time));
return (0);
}
Эта программа отображает дату и время в виде:
The present date and time is: Fri Oct 14 13: 16: 20 2005
1. //пример использования функции difftime
#include < iostream>
#include < ctime>
int main ()
{
time_t start, end;
char name[80];
time (& start); // начальное время
std:: cout < < " Пожалуйста, введите свое имя: ";
std:: cin.getline(name, 80); // считать имя в name
time (& end); // конечное время
std:: cout < < " Здравствуйте " < < name < < std:: endl;
std:: cout < < " Вам понадобилось "
< < difftime(end, start)
< < " секунд для ввода своего имени.n";
return 0;
}
Результат: Пожалуйста, введите свое имя: Чак Бартовски Здравствуйте Чак Бартовски Вам понадобилось 7 секунд для ввода своего имени.
2. //пример использования функции time
#include < iostream>
#include < ctime>
int main ()
{
time_t seconds;
seconds = time (NULL); // получить текущую дату, выраженную в секундах
std:: cout < < " Количество часов, прошедших с 1 января 1970 года = "
< < seconds/3600 < < std:: endl;
return 0;
}
Результат: Количество часов, прошедших с 1 января 1970 года = 374967
пример использования функции strftime
#include < iostream>
#include < ctime>
int main()
{
time_t rawtime;
struct tm * timeinfo;
char buffer [80]; // строка, в которой будет храниться текущее время
time (& rawtime); // текущая дата в секундах
timeinfo = localtime (& rawtime); // текущее локальное время, представленное в структуре
strftime (buffer, 80, " Сейчас %I: %M%p.", timeinfo); // форматируем строку времени
std:: cout < < buffer < < std:: endl;
return 0;
}
Результат: Сейчас 07: 37PM.
4. //пример использования функции ctime
#include < iostream>
#include < ctime>
int main ()
{
time_t rawtime;
time (& rawtime); // текущая дата в секундах
std:: cout < < " Текущее локальное время и дата: "
< < ctime (& rawtime); // текущая дата в понятной для человека форме
return 0;
}
Результат: Текущее локальное время и дата: Wed Oct 10 18: 44: 46 2012
|