A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨恩锋 黑马帝   /  2011-10-28 17:26  /  3378 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

要求一段话中统计出中文字符的个数,比如如下一段话其中包括中文还有英文字符包括标点符号:hi,很高兴见到你,你也是game爱好者吗?。要求统计出这段话的中文字符的个数。

6 个回复

倒序浏览
用正则表达式不就可以啦!
回复 使用道具 举报
黄朝辉 发表于 2011-10-28 19:42
用正则表达式不就可以啦!

具体实现代码写出来。
回复 使用道具 举报
晕!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Data;
  7. using System.Data.SqlClient;
  8. using System.Text.RegularExpressions;

  9. namespace ConsoleApplication
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             Regex re = new Regex("[\u4e00-\u9fa5]");
  16.             MatchCollection ma = re.Matches("123213我啊12312你啊啊啊啊12312");
  17.             Console.WriteLine(ma.Count);
  18.         }
  19.     }
  20.    

  21. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 10642491 于 2011-10-30 08:28 编辑
黄朝辉 发表于 2011-10-29 08:28
晕!


补充一个“统计英文单词个数”
  1. namespace hello
  2. {
  3.     class Program
  4.     {
  5.         static void Main(string[] args)
  6.         {
  7.             Regex re = new Regex(@"\b\w+\b");

  8.             MatchCollection ma = re.Matches("welcome to 传智播客黑马training camp");

  9.             Console.WriteLine(ma.Count);
  10.             Console.ReadKey();
  11.         }
  12.     }
  13. }
复制代码

回复 使用道具 举报
看网上有一个面试题是怎么判断字符串里的单词是英文单词,注意必须是单词,像wawd样的就不是单词?
有人回了一个帖,看得很迷糊,他是这么写的:
先提取字符串  
然后把字典里的单词排列成一般字典,定义26个字母的结构体,比如word以w开头,那么定义w结构体,在字典里找到w的地址,然后在w结构体里面定义26个字母的结构体,查第二个字母的o的结构体地址,依次找到r的地址,在r结构体中寻找d结构体的地址,找到以后如果在d结构体里面的标志值flag是1,那么表示存在word这么一个单词,如果要找worldl,那么就不用判断找到word时的标志,而直接寻找l结构体在判断,26个字母结构体由一个标志符和26个字母结构体的实例组成,编写字典时可以把不存在的省略,并且再在结构体中添加存在的字母列表,如果不存在,就不编写地址,也不需要再到地址下寻找,比如worldl,查找到word后会先在字母列表中查找是否存在L的地址,如果不存在,则直接返回0,表示该单词不存在,这个有点像windows注册表

也有人说用字典库,不明白什么是字典库,谁能说一下用C#怎么实现?
回复 使用道具 举报
夏雪锐 黑马帝 2011-10-31 23:18:07
7#
            string str = "hi,很高兴见到你,你也是game爱好者吗?。";
            char[] ch=str.ToCharArray();
            int count = 0;//统计结果

            for (int i = 0; i < ch.Length;i++ )
            {
                for (int temp = 0X4e00; temp<= 0X9fa5;temp++ )
                {
                    if (ch[i] == Convert.ToChar(temp))
                    {
                        count++;
                    }
                }
不用正则表达式,思路是把每个字符都与unicode中汉字的编码统统对一下,然后再加一,不过效率嘛。。。。
            }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马