Вторая не очен ьужачная попытка
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++
|
# ---> C++
|
||||||
|
.vscode
|
||||||
|
builds
|
||||||
*.ilk
|
*.ilk
|
||||||
*.pdb
|
*.pdb
|
||||||
.vscode
|
*.pro
|
||||||
|
*.pro.user
|
||||||
|
|
||||||
# Prerequisites
|
# Prerequisites
|
||||||
*.d
|
*.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