C++ 实现字符串按单个字符拆分,支持UTF-8

void CCreatEnt::CStringToSingleStr(const std::string input,std::vector &output)
{
std::string ch;
for(size_t i =0,len=0;i!=input.length();i+=len)
{
unsigned char byte = (unsigned)input[i];
if(byte >= 0xFC)//length 6
{
len = 6;
}
else if(byte >= 0xF8)
{
len = 5;
}
else if(byte >= 0xF0)
{
len = 4;
}
else if(byte >= 0xE0)
{
len = 3;
}
else if(byte >= 0xC8)
{
len = 2;
}
else
{
len = 1;
}
ch=input.substr(i,len);
output.push_back(ch);
}
}


这段代码是网络上查到的,但实际上返回的结果并不正确,若字符串为
1.3几个简单的命令5
返回值是
1
.
3
几个简
单的


5
请问如何才能按每个字符拆分呢?

第一用插入代码功能,插入的代码还是不好看,请见谅,希望高手能指点一下如何拆分成一个个的字符,非常感谢!

int _tmain(int argc, _TCHAR* argv[])
{

string str("1.3hello我的demo");
int len = MultiByteToWideChar(CP_ACP,0,str.c_str(),str.length(),NULL,0);   
wchar_t* pwchar=new wchar_t[len+1];   
MultiByteToWideChar(CP_ACP,0,str.c_str(),str.length(),pwchar,len);   
pwchar[len]='\0';   

vector<wchar_t> vec;

for (int i=0; i<len; i++)
{
    vec.push_back(pwchar[i]);
}

delete pwchar;

getchar();
return 0;

}

就是全部转为双字节,因为有中文

图片说明
转换出来的是数字

#include
#include
using namespace std;
int main()
{
string str;
cin >> str;

char s[str.length()];            //定义字符数组s,长度为字符串str的长度; 
for(int i=0;i<str.length();i++)
    s[i]=str[i];                            //字符串  各个字符分离; 

for(int i=0;i<str.length();i++)  //输出 
    cout << s[i] << endl;

return 0;

}