読者です 読者をやめる 読者になる 読者になる

kanetaiの二次記憶装置

プログラミングに関するやってみた、調べた系のものをQitaに移して、それ以外をはてブでやる運用にしようと思います。http://qiita.com/kanetai

UTF-8

C++UTF-8を扱うときに作ったもの。

UTF-8文字列を一文字単位に分割する

UTF-8文字の2バイト目以降は10で始まる。
→0xC0(11000000)でマスキングして0x80(10000000)になってたら2バイト目以降
※入力された文字列が正しいUTF-8文字列になっているかどうかはチェックしていないので注意

#include<iostream>
#include<string>
#include<vector>
using namespace std;

std::vector<std::string> split_utf8(const std::string& str)
{
	std::vector<std::string> result;
	for(size_t i = 0; i < str.size(); i++){
		if( (str[i] & 0xC0) == 0x80 ) result[ result.size()-1 ] += str[i];
		else result.push_back( std::string()+str[i] );
	}
	return result;
}

int main(){
	string input;
	while(cin>>input){
		vector<string> v = split_utf8(input);
		for(size_t i=0;i<v.size(); i++) cout << "v[" << i << "]={" << v[i] << "}" << endl;
	}
	return 0;
}