计算包含特殊字符的字符串的字符个数

额...今天面试的一道题,竟然没做出来,真是丢人,虽然简单,但是现在记录下来以示警戒:

给一个字符串,例如“d|f|d|s|f|s|a|d|d|d|a|f|d|g|d|f|”,要求输出的结果是

“d的数量是:7个!

f的数量是:4个!

s的数量是:2个!

a的数量是:2个!

g的数量是:1个!”

界面:很简单的

下面是代码:

首先是去掉重复字符串:

网上借鉴的一种方法是:

View Code
public List<string> getList(string str)
        {
            List<string> list = new List<string>();
            char[] sep = { ' ', '|', '#', '*', ',', ':', ';' };
            int start = 0;
            int end = 0;
            while (start<str.Length)
            {
                end = str.IndexOfAny(sep, start);
                if (end == -1)
                {
                    for (int i = 0; i < str.Length; i++)
                    {
                        list.Add(str[i].ToString());
                    }
                    break;
                }
                if (end!=start)
                {
                    list.Add(str.Substring(start, (end - start)));
                }
                start = end + 1;
            }
            return list;
        }

这种方法没太看懂,于是有了第二种方法:

View Code
 public string getString(string str)
        {
            char[] sep = { ' ', '|', '#', '*', ',', ':', ';' };
            char[] chars = str.ToCharArray();
            StringBuilder sb = new StringBuilder();
            foreach (var item in chars)
            {
                if (!sep.Contains(item))
                {
                    sb.Append(item);
                }
            }
            return sb.ToString();
        }

这种方法相对简单,对我来说比较容易理解。

整个代码实现是:

View Code
//去掉重复字符
        public string getDistinctString(string str)
        {
            StringBuilder sb = new StringBuilder();
            List<string> list = new List<string>();
            char[] chars = str.ToCharArray();
            foreach (var item in chars)
            {
                if (!list.Contains(item.ToString()))
                {
                    list.Add(item.ToString());
                    sb.Append(item);
                }
            }

            return sb.ToString();
        }

private void button1_Click(object sender, EventArgs e)
        {
            char[] chars = getDistinctString(getString(textBox1.Text)).ToCharArray();
            char[] list = getString(textBox1.Text).ToCharArray();
            string result="";
            foreach (var item in chars)
            {
                int count = 0;
                foreach (var i in list)
                {
                    if (item==i)
                    {
                        count++;
                    }
                }
                result = result + item + "的数量是:" + count + "个!" + " ";
            }
            textBox2.Text = result;
        }

 

posted @ 2013-04-08 15:22  Wico  阅读(513)  评论(6编辑  收藏  举报