C++ strtok()函数分解中文字符串出错

我想利用Strtok函数进行中文字符串分解工作,分隔符是标点符号,一直以来都比较顺利。但是遇到“非常”一词的时候,每次分解结果都是“非?”,无法得出正常结果。求助一下解决... 我想利用Strtok函数进行中文字符串分解工作,分隔符是标点符号,一直以来都比较顺利。但是遇到“非常”一词的时候,每次分解结果都是“非?”,无法得出正常结果。求助一下解决方案。

附上代码:

int SentenceSegment(string Sentence){

char s[500];
for(int i=0;i<500;i++)
s[i]=NULL;

stringstream sstr;
sstr.clear();
sstr<<Sentence;
sstr>>s;

const char *d = ",。";
char *p;
p = strtok(s,d);

int i=0;

while(p){
SentenceSegmentation[i]=p;
//cout<<"第"<<i<<"个片段:";
//printf("%s\n",p);
//cout<<endl;
p=strtok(NULL,d);
i++;}
return i;
}
展开
 我来答
欢呀欢9597
2013-01-30
知道答主
回答量:1
采纳率:0%
帮助的人:2.6万
展开全部
不知道你的汉字编码方式,标点符号如果是全角的话,很容易出现这种问题。
strtok是按单字节搜索的。
例如gbk编码的。?都可能和”常“字混淆(它们有一个同样的字节编码0xA3)。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
coolarcom
2013-01-24 · TA获得超过235个赞
知道小有建树答主
回答量:220
采纳率:0%
帮助的人:223万
展开全部
不知道你用的编码方式,但是这个函数是不能处理多字节字符的。
针对gbk,unicode或者utf8应该分别用不同的专用字符串处理函数。
追问
可是处理其它中文字符串的时候效果很好啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wzywsk
2013-01-24
知道答主
回答量:18
采纳率:0%
帮助的人:13.5万
展开全部
可以考虑使用英文标点符号作为分隔符,建议使用strsep
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式