fork download
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <locale>
  4. #include <stdexcept>
  5.  
  6. int main() {
  7. std::string line;
  8. std::string input;
  9. std::size_t bytes = 0;
  10. std::size_t characters = 0;
  11.  
  12. try {
  13. std::locale::global(std::locale(""));
  14. }
  15. catch (std::runtime_error const& e) {
  16. std::cout << e.what() << "\n";
  17. return 1;
  18. }
  19.  
  20. std::cout << "Using locale: " << std::locale().name() << "\n";
  21.  
  22. while (getline(std::cin, line)) {
  23. input += line + "\n";
  24. bytes += line.length();
  25. for (
  26. std::size_t i = 0;
  27. i < line.length();
  28. i+= std::mblen(line.c_str() + i, line.length() - i)
  29. )
  30. ++characters;
  31. }
  32.  
  33. std::cout << input;
  34. std::cout << bytes << " bytes " << characters << " characters\n";
  35. }
Success #stdin #stdout 0.01s 4900KB
stdin
♠♣♥♦
stdout
Using locale: en_US.UTF-8
♠♣♥♦
12 bytes 4 characters