Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <sstream>
- void format(std::ostringstream& ss, const char* fmt)
- {
- if (!fmt || *fmt == '\0')
- {
- return;
- }
- while (*fmt != '\0')
- {
- if (*fmt == '%')
- {
- ++fmt;
- if (*fmt == '?')
- {
- ++fmt;
- ss << '?';
- break;
- }
- else if (*fmt != '%')
- continue;
- }
- ss << *fmt;
- ++fmt;
- }
- }
- template <typename H, typename... T>
- void format(std::ostringstream& ss, const char* fmt, H&& p, T&&... t)
- {
- if (!fmt || *fmt == '\0')
- {
- return;
- }
- while (*fmt != '\0')
- {
- if (*fmt == '%')
- {
- ++fmt;
- if (*fmt == '?')
- {
- ++fmt;
- ss << std::forward<H>(p);
- break;
- }
- else if (*fmt != '%')
- continue;
- }
- ss << *fmt;
- ++fmt;
- }
- format(ss, fmt, std::forward<T>(t)...);
- }
- template <typename... T>
- std::string format(const char* fmt, T... t)
- {
- std::ostringstream oss;
- format(oss, fmt, std::forward<T>(t)...);
- return oss.str();
- }
- #include <iostream> // for std::cout
- int main()
- {
- {
- unsigned long long u = -1;
- long long i = -1;
- char c = 100;
- std::cout << format("asd %? %? %? % %%", i, u, c) << std::endl;
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement