/
solidbase
/
C3_s21_stringplus
Обзор
Документация
Войти
/
solidbase
/
C3_s21_stringplus
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/s21_sprintf.h
94 строки
5 KB
Andrey
Change to earliema %g/%G
06 фев 2026, 08:22
06 фев 2026, 08:22
22e7896
Код
Авторство
О чём код?
#ifndef POPA #define POPA #define BUF_FOR_BIG_CHAR 10 #include <math.h> #include <stdarg.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <wchar.h> #include "s21_string.h" typedef struct form { // флаги{ bool fl_gr; // # bool fl_pl; //+ bool fl_mi; //- bool fl_nu; // 0 bool fl_sp; //' ' // }флаги int width; // ширина поля int accuracy; // точность поля bool h; // h перед спецификатором bool hh; // hh перед спецификатором bool ll; // ll перед спецификатором bool l; // l перед спецификатором bool L; // L перед спецификатором char sp; // спецификаторы } form; int format_change(char* str, const char* format, int* index_format, int* index_str, va_list* ap); // выполняет преобразования формата int template_sp(const char* format, int* index_format, va_list* ap, form* change); // находит спецификатор int template_betwsp(const char* format, int index_format, va_list* ap, int start_index_format, form* change); // функция записывает флаги, ширину и // точность поля поля в структуру int acc_wid_arg(const char* format, int index_star, va_list* ap, form* change); // работа со звёздочками int length_sp(const char* format, int index_len, form* change); // обрабатывает длинну int allocate_sp(char* str, int* index_str, va_list* ap, form* change); long long lenaddnum(form change, va_list* ap); // считывает длинну для целых чисел bool signum(char* str, int* index_str, form change, int* lenchange, long long num, bool count); // обрабатывает знак int f_sp(char* str, int* index_str, va_list* ap, form* change); // спецификатор f long double lenadddouble(form change, va_list* ap); bool sigdouble(char* str, int* index_str, form change, int* lenchange, long double num, bool cout); // обрабатываем знак, пробел int e_sp(char* str, int* index_str, va_list* ap, form* change); // спецификатор Е е int rounding(char* str, int* index_str, long double frac, int start_index_str); int insert_double(char* str, int* index_str, form change, long double num); void shift_left_str(char* str, int start_index_str, int index_str); void shift_rigth_str(char* str, int start_index_str, int* index_str, form change); int c_sp(char* str, int* index_str, va_list* ap, form* change); // записываем символ int s_sp(char* str, int* index_str, va_list* ap, form* change); // записываем строку int lc_sp(char* str, int* index_str, va_list* ap, form* change); // записываем длинный символ int unicod_char(int sim, char* str, int* index_str); // записывает символы unicod в char* int ls_sp(char* str, int* index_str, va_list* ap, form* change); // записывает строки unicod в char* bool sigunum(char* str, int* index_str, form change, int* lenchange, bool count); // пробел и + для unsigned long long unsigned lenaddunum( form change, va_list* ap); // управление длинны для беззнакового целого int change_sim(int sim, form change); int num_sp(char* str, int* index_str, va_list* ap, form* change); int prefix_num(char* str, int* index_str, form change, int* start_index_str, int* del, long long unsigned num); // добавляет префиксы для x и о int unum_sp(char* str, int* index_str, va_list* ap, form* change); // для беззнаковых целых чисел int e_num_change(long double* num, int* exp); // нормализует число для %e void point_change(char* str, int* index_str, int* lenchange, form change, bool sign); // убирает точку при accuracy=0 int g_sp(char* str, int* index_str, va_list* ap, form* change); // спецификатор g G int get_exponent(long double num); // вычисляет экспоненту числа void remove_trailing_zeros(char* str, int* index_str, form* change); int write_exponent(char* str, int* index_str, int exp, char e_char); int p_sp(char* str, int* index_str, va_list* ap, form* change); #endif