Вторая не очен ьужачная попытка
This commit is contained in:
295
.clang-format
Normal file
295
.clang-format
Normal file
@@ -0,0 +1,295 @@
|
||||
---
|
||||
Language: Cpp
|
||||
|
||||
#https://releases.llvm.org/14.0.0/tools/clang/docs/ClangFormatStyleOptions.html
|
||||
|
||||
#Особый отступ для модификаторов видимости (на уровне с 'class')
|
||||
AccessModifierOffset: -4
|
||||
|
||||
#Выравнивание аргументов после открытия скобки
|
||||
AlignAfterOpenBracket: Align
|
||||
|
||||
#Выравнивание элементов в {}, когда несколько строк друг под другом
|
||||
#Настройка забирает гибкость, пока от нее отказываемся
|
||||
AlignArrayOfStructures: None
|
||||
|
||||
#Выравнивание после =, когда несколько строк друг под другом
|
||||
AlignConsecutiveAssignments: None
|
||||
|
||||
#Выравнивание значений битовых полей
|
||||
AlignConsecutiveBitFields: None
|
||||
|
||||
#Выравнивание деклараций имен, когда несколько строк друг под другом
|
||||
AlignConsecutiveDeclarations: None
|
||||
|
||||
#Выравнивание значений дефайнов, когда несколько строк друг под другом
|
||||
AlignConsecutiveMacros: AcrossComments
|
||||
|
||||
#Выравнивание бэкслешей в макросах
|
||||
AlignEscapedNewlines: Left
|
||||
|
||||
#Выравнивание операторов (так себе настройка)
|
||||
AlignOperands: DontAlign
|
||||
|
||||
#Выравнивание комментов, когда несколько строк друг под другом
|
||||
AlignTrailingComments: true
|
||||
|
||||
#Если вызов функции или список инициализаторов в фигурных скобках
|
||||
#не помещается на одной строке, разрешите помещать все аргументы
|
||||
# на следующую строку, даже если BinPackArguments имеет значение false.
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
|
||||
#Если объявление функции не помещается на одной строке, разрешите
|
||||
# помещать все аргументы на следующую строку, даже если
|
||||
# BinPackArguments имеет значение false.
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
|
||||
#Если в {} нет выражений, то закрывающая скобка рядом с открывающей, без переноса: {}
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
|
||||
#Запрещаем мультилайн в кейзах свича
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
|
||||
#Запрещаем мультилайн в enum
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
|
||||
#В классах однострочные функции всегда single-line
|
||||
#Свободные функции всегда НЕ single-line
|
||||
#Функции без тела всегда single-line
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
|
||||
#Запрет single-line if-конструкций
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
|
||||
#Можно воротить лямбды как душе угодно
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
|
||||
#Запрет single-line циклов
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
|
||||
#Разрыв строки после возвращаемого типа объявляемой функции
|
||||
AlwaysBreakAfterReturnType: None
|
||||
|
||||
#Если true, всегда разрывать строку перед многострочными строковыми литералами.
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
|
||||
#Всегда перенос строки после обьявления шаблона
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
|
||||
#DisableFormat: false
|
||||
|
||||
#Если false, аргументы вызова функции будут либо все в одной строке,
|
||||
#либо будут иметь по одной строке каждый.
|
||||
# ВАЖНО! с true получается гибкая настройка
|
||||
BinPackArguments: true
|
||||
|
||||
#Если false, параметры объявления функции или определения функции будут
|
||||
#либо все в одной строке, либо будут иметь по одной строке каждый.
|
||||
# ВАЖНО! с true получается гибкая настройка
|
||||
BinPackParameters: true
|
||||
|
||||
#Добавляет по одному пробелу с каждой стороны : (для битового поля)
|
||||
BitFieldColonSpacing: Both
|
||||
|
||||
#Правило переноса строки перед фигурными скобками (и не только)
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterEnum: true
|
||||
AfterStruct: true
|
||||
AfterFunction: true
|
||||
AfterCaseLabel: true
|
||||
AfterClass: true
|
||||
AfterControlStatement: true
|
||||
AfterNamespace: true
|
||||
AfterUnion: true
|
||||
AfterExternBlock: true
|
||||
BeforeElse: true
|
||||
BeforeCatch: true
|
||||
BeforeLambdaBody: false
|
||||
SplitEmptyNamespace: false
|
||||
BeforeWhile: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
|
||||
#При переносе операторы с левого края, но = остается на своей строке
|
||||
BreakBeforeBinaryOperators: NonAssignment
|
||||
|
||||
#Если true, концепт будет помещен на новую строку.
|
||||
BreakBeforeConceptDeclarations: true
|
||||
|
||||
#Операторы тернарного операторы с левого края (при переносе)
|
||||
BreakBeforeTernaryOperators: true
|
||||
|
||||
#При инициализации в конструкторе ':' и ',' не переносятся
|
||||
BreakConstructorInitializers: AfterColon
|
||||
|
||||
#При наследовании классов ':' и ',' не переносятся
|
||||
BreakInheritanceList: AfterComma
|
||||
|
||||
#Разрешить разрыв строковых литералов при форматировании.
|
||||
BreakStringLiterals: false
|
||||
|
||||
#Ограничение по ширине исходников
|
||||
ColumnLimit: 0
|
||||
|
||||
#Если true, последовательные объявления пространств имен будут находиться в одной строке.
|
||||
#Если false, каждое пространство имен объявляется в новой строке.
|
||||
CompactNamespaces: false
|
||||
|
||||
#Количество символов, используемых для отступа в списках инициализаторов конструктора,
|
||||
#а также в списках наследования.
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
|
||||
#Отступ от продолжения выражения после переноса строки
|
||||
#Используется при выравнивании длинных макросов по левому краю
|
||||
ContinuationIndentWidth: 0
|
||||
|
||||
#Пробелы в { 1, 2, 3 } перед первым и после последнего элемента
|
||||
Cpp11BracedListStyle: false
|
||||
|
||||
#Если true, анализирует отформатированный файл на предмет
|
||||
#наиболее распространенного выравнивания & и *
|
||||
DerivePointerAlignment: false
|
||||
|
||||
#Если нужно полностью отключить форматирование (зачем??)
|
||||
DisableFormat: false
|
||||
|
||||
#Пропуск строки ПОСЛЕ модификатора доступа (например, public:)
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
|
||||
#Пропуск строки ДО модификатора доступа (например, public:)
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
|
||||
#Экспериментировать с экспериментальными настройками не будем
|
||||
#ExperimentalAutoDetectBinPacking: false
|
||||
|
||||
#Комменты после namespace
|
||||
FixNamespaceComments: true
|
||||
|
||||
#Сортировка инклюдов - каждая секция (разделенная пустой строкой) сортируется лексикографически
|
||||
IncludeBlocks: Preserve
|
||||
|
||||
#Сложная ненужная настройка отступов модификаторов доступа - при true
|
||||
# будет игнорировать AccessModifierOffset
|
||||
IndentAccessModifiers: false
|
||||
|
||||
#Дополнительный отступ у {} после case: в switch-операторе. Выглядит страшно, поэтому false
|
||||
IndentCaseBlocks: false
|
||||
|
||||
#Отступ у ключевого слова case в switch. при false case и switch на одном уровне
|
||||
IndentCaseLabels: false
|
||||
|
||||
#Выравнивание тела extern-секции
|
||||
IndentExternBlock: NoIndent
|
||||
|
||||
#Выравнивание goto лэйблов
|
||||
IndentGotoLabels: false
|
||||
|
||||
#Выравнивание вложенных препроцессорных директив
|
||||
IndentPPDirectives: None
|
||||
|
||||
#Сделать отступ для пункта required в шаблоне
|
||||
IndentRequires: false
|
||||
|
||||
#Отступы, пробелов
|
||||
IndentWidth: 4
|
||||
|
||||
#При длинной сигнатуре функции можно перенести имя на новую строку без доп. отступов
|
||||
IndentWrappedFunctionNames: false
|
||||
|
||||
#Делать пропуск строки после начала блока { }
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
|
||||
#Выравнивание тела лямбды
|
||||
LambdaBodyIndentation: OuterScope
|
||||
|
||||
#Максимум пустых строк подряд
|
||||
MaxEmptyLinesToKeep: 1
|
||||
|
||||
#Отступы у тел вложенных namespace's
|
||||
NamespaceIndentation: None
|
||||
|
||||
#Количество столбцов, используемых для отступов операторов препроцессора.
|
||||
#Настройка не используется
|
||||
#PPIndentWidth: 10
|
||||
|
||||
#Порядок в списке инициализации. BinPack дает гибкость в настройке
|
||||
PackConstructorInitializers: BinPack
|
||||
|
||||
#PenaltyBreak настройки непонятно че делают вообще.. не используется
|
||||
|
||||
#Выравнивание * и & к типу 'int* num'
|
||||
PointerAlignment: Left
|
||||
|
||||
#Не используется:
|
||||
#QualifierAlignment
|
||||
#QualifierOrder
|
||||
#RawStringFormats
|
||||
|
||||
#Выравнивание ссылки, как и указателя: int& obj
|
||||
ReferenceAlignment: Pointer
|
||||
|
||||
#Перенос длинных комментов
|
||||
ReflowComments: false
|
||||
|
||||
#Удалять {} у if, for, ... где их можно опустить (single-line тело)
|
||||
#false - не удаляем
|
||||
RemoveBracesLLVM: false
|
||||
|
||||
#Указывает использование пустых строк для разделения блоков определения,
|
||||
#включая классы, структуры, перечисления и функции.
|
||||
#Leave - гибкая настройка. Оставить как есть
|
||||
SeparateDefinitionBlocks: Leave
|
||||
|
||||
#Максимальное количество развернутых строк, которые охватывает короткое пространство имен.
|
||||
ShortNamespaceLines: 5
|
||||
|
||||
#При сортировке инклюдов учитывать регистр
|
||||
SortIncludes: CaseSensitive
|
||||
|
||||
#Если true, clang-format будет сортировать using-декларации
|
||||
SortUsingDeclarations: false
|
||||
|
||||
#Пробел после CStyle cast (int) a;
|
||||
SpaceAfterCStyleCast: false
|
||||
|
||||
#пробел после '!' в логических условиях
|
||||
SpaceAfterLogicalNot: false
|
||||
|
||||
#Пробел после ключевого слова template
|
||||
SpaceAfterTemplateKeyword: true
|
||||
|
||||
#Пробелы после PointerQualifiers
|
||||
# Default - также как в PointerAlignment
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
|
||||
#Пробел перед '='
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
|
||||
#Пробел после case colon: (case 1 : )
|
||||
#false - (case 1:)
|
||||
SpaceBeforeCaseColon: false
|
||||
|
||||
#Если значение равно true, перед списком в фигурных скобках C++11,
|
||||
#используемым для инициализации объекта, будет вставлен пробел
|
||||
#(после предшествующего идентификатора или типа).
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
|
||||
#Если false, пробелы будут удалены перед двоеточием инициализатора конструктора.
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
|
||||
#Если false, пробелы будут удалены перед двоеточием наследования.
|
||||
SpaceBeforeInheritanceColon: true
|
||||
|
||||
#Определяет, в каких случаях ставить пробел перед открывающими скобками.
|
||||
# ControlStatements ставит пробел перед открывающими скобками только
|
||||
# после ключевых слов (for/if/while...).
|
||||
SpaceBeforeParens: ControlStatements
|
||||
|
||||
#Если false, пробелы будут удалены перед двоеточием цикла range-based fr.
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
|
||||
#Если true, вокруг условий if/for/switch/while будут вставлены пробелы.
|
||||
SpacesInConditionalStatement: false
|
||||
|
||||
---
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,7 +1,10 @@
|
||||
# ---> C++
|
||||
.vscode
|
||||
builds
|
||||
*.ilk
|
||||
*.pdb
|
||||
.vscode
|
||||
*.pro
|
||||
*.pro.user
|
||||
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
113
main.cpp
Normal file
113
main.cpp
Normal file
@@ -0,0 +1,113 @@
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
Online C++ Compiler.
|
||||
Code, Compile, Run and Debug C++ program online.
|
||||
Write your code in this editor and press "Run" button to compile and execute it.
|
||||
|
||||
https://www.onlinegdb.com/online_c++_compiler
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include <cctype>
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
// std::string kek(std::string strIn, int pos = 0)
|
||||
// {
|
||||
// std::cout << strIn << std::endl;
|
||||
|
||||
// for (int i = pos; i < strIn.size(); i++)
|
||||
// {
|
||||
// std::string strNum;
|
||||
// if (std::isdigit(static_cast<unsigned>(strIn[i])))
|
||||
// { // Если число
|
||||
// while (true)
|
||||
// {
|
||||
// strNum += strIn[i++];
|
||||
// if (strIn[i] == '[')
|
||||
// break; // Буквы или цифры начнутся со следующей буквы
|
||||
// }
|
||||
// auto repeat = std::atoi(strNum.c_str());
|
||||
// std::cout << repeat << std::endl;
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// return "return";
|
||||
// }
|
||||
|
||||
std::string decode(std::string& strIn, std::string::iterator& itr)
|
||||
{
|
||||
std::string out;
|
||||
|
||||
while (itr != strIn.end())
|
||||
{
|
||||
std::string strNum;
|
||||
auto repeat = 1;
|
||||
|
||||
auto itr_char = *itr; // DELME
|
||||
|
||||
if (std::isdigit(static_cast<unsigned>(*itr)))
|
||||
{
|
||||
while (*itr != '[')
|
||||
{
|
||||
strNum += *itr++;
|
||||
}
|
||||
repeat = std::atoi(strNum.c_str());
|
||||
// std::cout << repeat << std::endl; // DELME
|
||||
auto tmp = decode(strIn, ++itr);
|
||||
|
||||
for (int i = 0; i < repeat; ++i)
|
||||
out += tmp;
|
||||
|
||||
}
|
||||
|
||||
if (*itr == ']')
|
||||
{
|
||||
return out; // нужно будет вернуть подстроку
|
||||
}
|
||||
else
|
||||
out += *itr;
|
||||
|
||||
++itr;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string kek(std::string strIn)
|
||||
{
|
||||
std::cout << strIn << std::endl;
|
||||
auto itr = strIn.begin();
|
||||
|
||||
return decode(strIn, itr);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::string strIn;
|
||||
|
||||
strIn = "3[a2[c]]";
|
||||
std::cout << kek(strIn) << std::endl;
|
||||
|
||||
strIn = "c2[a]3[b]c";
|
||||
std::cout << kek(strIn) << std::endl;
|
||||
|
||||
strIn = "c2[a3[b]]c";
|
||||
std::cout << kek(strIn) << std::endl;
|
||||
|
||||
strIn = "231[ab]";
|
||||
std::cout << kek(strIn) << std::endl;
|
||||
|
||||
strIn = "3[b15[a]]";
|
||||
std::cout << kek(strIn) << std::endl;
|
||||
|
||||
// std::string wait;
|
||||
// std::cin >> wait;
|
||||
return 0;
|
||||
}
|
||||
37
t.cpp
37
t.cpp
@@ -1,37 +0,0 @@
|
||||
/******************************************************************************
|
||||
|
||||
Online C++ Compiler.
|
||||
Code, Compile, Run and Debug C++ program online.
|
||||
Write your code in this editor and press "Run" button to compile and execute it.
|
||||
|
||||
https://www.onlinegdb.com/online_c++_compiler
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
|
||||
void kek(std::string str)
|
||||
{
|
||||
std::cout << str;
|
||||
|
||||
std::string braket;
|
||||
for (auto s : str)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << "Hello World" << std::endl;
|
||||
|
||||
kek("c2[a]3[b]c");
|
||||
kek("231[ab]");
|
||||
kek("c2[a]3[b]c");
|
||||
kek("3[b15[a]]");
|
||||
|
||||
std::string wait;
|
||||
std::cin >> wait;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user