一个c++处理中文标点的问题

newgoodboy 2003-03-17 01:38:52
我要在一个中英文混杂的语句中标记出所有的标点符号,用的是string::find(sign)函数,但是碰到了如下问题:
输入:  董建华昨天下午在政府总部与传媒见面时,谈及港府的新财政预算案和公务员体制改革,也第一次就梁锦松买新车风波发表谈话。
输出: 
  at 0
  at 2
, at 40
, at 80
。 at 116
《 at 3
这里在董建华之前是有两个空格,但是程序把第二个空格的第二个字节和“董
”的第一个字节看作了《,这个显然是不对的,我应该如何得到正确的结果。
我的环境:redhat 7.3
kdevelop 2.1
...全文
142 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-08-22
  • 打赏
  • 举报
回复
使用Unicode表示,用wstring。
steel_de_lee 2003-03-17
  • 打赏
  • 举报
回复
用状态机来判断,不要用find
问题描述 设计C++类,使其能够统计文本文件中字符个数,在终端中显示结果,并将结果保存到指定的文件中。需要统计的字符有:a、英文字母总数b、英文单词总数从c、中文字符总数(包括标点符号)d、行总数e、其他字符总数(包括英文标点、空白符等)。 问题分析 从问题描述中可以看到,我们所要做的就是将一篇文章(txt格式,字符格式为ANSI)中出现的中英文字符出现的次数进行统计。而一篇文本文件中出现的字符种类和顺序没有规律,如何对当前读取的字符的种类进行判断并转入到相应的统计状态成为了问题的关键。 但是,我们知道对于英文字母其ASCII码范围在65~90和97~122两个区间,而英文单词的判断就是在相邻两个非英文字母之间夹着一串英文字母,所以我们可以在读取了第一个非英文字母后判断下一个读取的是否为英文字母,如果是便转入英文字符的处理状态,其中可同时对字母个数进行统计,在读到非英文字符时退出该状态,并将英文单词数加1,然后转入“状态转换中心”进行状态转换的判断。 同理,对于中文字符的处理,也同上所述。但是由于中文字符占两个字节,而且各个编码格式中中文字符的编码范围不一致,所以处理起来比较麻烦,但是原理是一致的。在本例中仅对ANSI格式的编码进行处理,所以中文字符每个字节的范围为0x80~0xff,不过在实际操作中发现有些中文字符还是被漏掉了,应该是中文字符的编码范围并没有全部包括进去的原因。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧