fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. // Длина строки в кодовых точках UTF-8.
  6. // Каждая кодовая точка начинается с байта, верхние 2 бита которого — не 10.
  7. size_t u8_cps(const string& s)
  8. {
  9. return count_if(s.begin(), s.end(), [](unsigned char c) { return c >> 6 != 0b10; });
  10. }
  11.  
  12. int main() {
  13. const size_t WIDTH = 3, HEIGHT = 4;
  14.  
  15. const char*** table = new const char**[HEIGHT];
  16. for (size_t y = 0; y < HEIGHT; y++)
  17. table[y] = new const char*[WIDTH];
  18.  
  19. table[0][0] = ""; table[0][1] = "--- БУХГАЛТЕРСКИЙ ОТЧЁТ ---"; table[0][2] = "";
  20. table[1][0] = "СОТРУДНИК"; table[1][1] = "К ОПЛАТЕ"; table[1][2] = "ЗАЧИСЛЕНО";
  21. table[2][0] = "Лупа"; table[2][1] = "45,0"; table[2][2] = "80,0";
  22. table[3][0] = "Пупа"; table[3][1] = "80,0"; table[3][2] = "45,0";
  23.  
  24. for (size_t y = 0; y < HEIGHT; y++)
  25. {
  26. for (size_t x = 0; x < WIDTH; x++)
  27. cout
  28. << string(max<ssize_t>(1, (y==0?10:15) - ssize_t(u8_cps(table[y][x]))), ' ')
  29. << table[y][x];
  30. cout << endl;
  31. }
  32.  
  33. for (size_t y = 0; y < HEIGHT; y++)
  34. delete[] table[y];
  35. delete[] table;
  36. return 0;
  37. }
Success #stdin #stdout 0s 4892KB
stdin
Standard input is empty
stdout
           --- БУХГАЛТЕРСКИЙ ОТЧЁТ ---          
      СОТРУДНИК       К ОПЛАТЕ      ЗАЧИСЛЕНО
           Лупа           45,0           80,0
           Пупа           80,0           45,0