计算包含特殊字符的字符串的字符个数
额...今天面试的一道题,竟然没做出来,真是丢人,虽然简单,但是现在记录下来以示警戒:
给一个字符串,例如“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; }