C++でUTF-8単位で一文字とか

UTF-8単位で1文字とか - Seeking for my unique color.をC++で書いただけ。あとで自分で使うかもなので。

#include <iostream>
#include <string>
#include <vector>

std::vector<std::string> split_utf8(const std::string& str) {
  std::vector<std::string> result;
  std::string tmp;
  bool first = true;
  for (size_t i = 0; i <= str.size(); ++i) {
	if (first || 
		(i != str.size() && (str.at(i) & 0xC0) == 0x80)) {
	  tmp += str.at(i);
	  first = false;
	  continue;
	}
	result.push_back(tmp);
	tmp.clear();
	if (i == str.size()) break;
	tmp += str.at(i);
  }
  return result;
};

int main(int argc, char *argv[]) {
  std::string str = "abc日本語";
  std::vector<std::string> result = split_utf8(str);

  for (std::vector<std::string>::iterator it = result.begin(); it != result.end(); it++) {
	std::cout << *it << std::endl;
  }
}

ちゃんとできてる。

/Users/syou6162/cpp% ./a.out
a
b
c
日
本
語