строка, представляющая дату и преобразующая ее - PullRequest
5 голосов
/ 10 мая 2019

Для форматирования строки, представляющей дату, полученную из другой части, требуется преобразование:

source:
    std::string s = "20190510";
target:
    std::string t = "05/10/2019";

Один из способов - скопировать символ на символ, есть ли элегантный способ сделать его красивым и быстрым?

ОБНОВЛЕНИЕ: Извините, преобразование должно быть из "ггггммдд" в "мм / дд / гггг".

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

Попробуйте insert:

int main() {
    std::string s = "20190510";
    s.insert(4, "/");
    s.insert(7, "/");
    std::cout << s << std::endl;
}
2 голосов
/ 10 мая 2019

Если вы не хотите изменять строку или копировать ее, у вас остается возможность форматировать ее только при необходимости. Это можно сделать с помощью небольшой утилиты:

struct date_format {
    std::string const& str;
    date_format(std::string const& str) : str(str) {}
    friend std::ostream& operator<< (std::ostream& os, date_format const& df) {
        return os.write(&df.str[4], 2)
                 .put('/')
                 .write(&df.str[6], 2)
                 .put('/')
                 .write(&df.str[0], 4);
    }
};

Для использования, например, std::cout << date_format(source);, посмотреть вживую .

В противном случае это определенно повлечет за собой копирование или перемещение символов.

...