diff options
1 files changed, 81 insertions, 0 deletions
| -rw-r--r-- | Week12/Exercise03.cpp | 81 |
diff --git a/Week12/Exercise03.cpp b/Week12/Exercise03.cpp new file mode 100644 index 0000000..59228fc --- /dev/null +++ b/Week12/Exercise03.cpp @@ -0,0 +1,81 @@ +#include <iostream> + +void printRepeat(char x, unsigned int repeat) { + while (repeat-- > 0) + std::cout << x; +} + +char* getField(unsigned &allocated, unsigned &size); + +int main() { + unsigned int allocated1, size1; + char* field1 = getField(allocated1, size1); + + unsigned int allocated2, size2; + char* field2 = getField(allocated2, size2); + + int columns; + std::cin >> columns; + + columns = columns - size1 - size2; + + if (columns <= 0) { + std::cout << field1 << field2 << std::endl; + } + else { + unsigned int sideSpaces = columns / 3, middleSpaces = columns / 3; + if (columns % 3 == 1) + middleSpaces++; + else if (columns % 3 == 2) + sideSpaces++; + + // Алтернативно може да създадем низ с дадения брой шпации и + // да изкараме него, вместо да принтираме шпациите директно. + + printRepeat(' ', sideSpaces); + std::cout << field1; + printRepeat(' ', middleSpaces); + std::cout << field2; + printRepeat(' ', sideSpaces); + std::cout << std::endl; + } + + delete[] field1; + delete[] field2; + + return 0; +} + +// Тази функция е почти същата като getLine от задача 2, само че +// разделителя (разделителите) между малко се различава. +// По-точно, позволява да имаме произволен брой шпации между полетата +// във входа, без това да влияе върху резултата. +char* getField(unsigned &allocated, unsigned &size) { + allocated = 8; + size = 0; + + char* input = new char[allocated]; + + char curr; + std::cin.get(curr); + while ((curr != ' ' || size == 0) && curr != '\n') { + if (curr != ' ') + input[size++] = curr; + std::cin.get(curr); + + // Реоразмеряване + if (size >= allocated) { + allocated *= 2; + char* newSentenceArray = new char[allocated]; + + for (unsigned i = 0; i < size; i++) + newSentenceArray[i] = input[i]; + + delete[] input; + input = newSentenceArray; + } + } + input[size] = '\0'; + + return input; +} |
