请教 VC 里怎么进行字符串的截取啊(包含字符和汉字)急

请问 VC 里如何进行字符串的截取啊?(包含字符和汉字)急!!!
请问   VC   里如何进行字符串的截取啊?(包含字符和汉字)急!!!

比如:   CString   str   =   "sdn中国dbsn ";
我想用一个循环每次截取两位.
第一次截到sd
第二次截到dn
第三次截到n中
第四次截到中国
...................就是循环去取两个字啊....

大家知道怎么实现吗?谢谢

------解决方案--------------------
第一个方法,转换为unicode,wchar *,不管种因为都是2个字节,处理的时候就可以统一了

第二个方法,IsDBCSLeadByte循环判断一下,如果是单字节字符,就计数1,如果是双字节字符就计数2,当计数到3的时候,你就可以break,返回正确的截断位置就可以了
下面这段是第一个方法

const int LEFT=3;
char * p= "ddddasdfsd源字符串ANSIf ";//源字符串ANSI
WCHAR *w=new WCHAR[(strlen(p)+1)]; //源字符串UNICODE
char * dp=new char[LEFT*2+1]; //截取后字符串ANSI,由于结果可能超过LEFT字节数,故分配2倍
WCHAR *ws=new WCHAR[LEFT+1];//截取后字符串UNICODE

//清0
memset(w,0,(strlen(p)+1)*sizeof(WCHAR));
memset(ws,0,(LEFT+1)*sizeof(WCHAR));
memset(dp,0,(LEFT+1)*sizeof(char));

//把源ANSI转换到UNICODE
MultiByteToWideChar( CP_ACP, 0, p,
strlen(p)+1, w,
strlen(p)+1 );

//截取左边若干字符(非字节)保存到ws中
wcsncpy(
ws,
w,
LEFT
);

//转换截取后的字符串到ANSI字符串
WideCharToMultiByte( CP_ACP, 0, ws, -1,
dp, LEFT*2+1, NULL, NULL );

//显示结果
TRACE( "%s\n ",dp);

//释放内存
delete[] dp;
delete[] ws;
delete[] w;


//你用的是VC6.0,不支持CStringW,这段代码支持VC6的,不用CStringW