计算字符串中每种字符出现的次数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算字符串中每种字符出现的次数[Dictionary
前几天,同学问了我一道程序员的面试题,题目是“统计用户输入的一串数字中每个数字出现的次数”。
当时看到这个题目,我的第一想法就是:
1.先判断用户输入的是否是数字,用if-else语句来判断;
2.将用户输入的数字字符串转换成char数组;
3.用for循环遍历每个字符,根据switch-case语句来逐一判断。
4.再建立一个int数组来接收判断后的结果,最后for循环输出。
class Program
{
static void Main(string[] args)
{
//计算用户输入的一串数字中每个数字出现的次数
Console.WriteLine("请输入一串数字");
string str = Console.ReadLine();
//将字符串转换为字符数组
char[] chnum = str.ToCharArray();
#region判断用户输入的是否是数字
for (int i = 0; i < chnum.Length; i++)
{//判断每一个字符是否是数字通过char的方法来判断
if (!char.IsNumber(chnum[i]))
{
Console.WriteLine("您的输入有误,请输入数字"); Console.ReadKey();
return;
}
}
#endregion
//定义一个新的数组来保存计数
int[] count=new int[9];
#region for循环遍历
//for循环遍历
for (int i = 0; i < chnum.Length; i++)
{
switch (chnum[i])
{
case'1':
count[0]++;
break;
case'2':
count[1]++;
break;
case'3':
count[2]++;
break;
case'4':
count[3]++;
break;
case'5':
count[4]++;
break;
case'6':
count[5]++;
break;
case'7':
count[6]++;
break;
case'8':
count[7]++;
break;
case'9':
count[8]++;
break;
}
}
#endregion
#region循环输出
for (int i = 0; i < count.Length; i++)
{
Console.WriteLine("含有的数字 {0} 的个数是:{1}", i + 1, count[i]);
}
#endregion
Console.ReadKey();
}
}
运行效果如下:
不过,这种方法有两个缺点就是,如果用户输入的不是数字(如字母或符号等),程序会提示错误,并退出;再者,也会统计出用户没有输入过的数字的个数为0个,如果某些时候不想知道没有输入的数字的个数,这种解法很不合适,而且代码修改起来也很复杂。
新解法:泛型集合
碰巧这几天接触了泛型集合,没想到用Dictionary来解这道题是那么的简单。代码如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入数字");
string numbers = Console.ReadLine();
//创建集合键为数字 char类型值为每个数字出现的次数 int类型
Dictionary
//将数字字符串转换为单个字符数组
char[] chs = numbers.ToCharArray();
for (int i = 0; i < chs.Length; i++)
{
//判断是否是数字用到char的isnumber方法
if (char.IsNumber(chs[i]))
{
//如果键中已含有该数字,则将其对应的值+1,否则不存在,加入键中值为1
if (!dict.ContainsKey(chs[i]))
{
//将每个数字字符作为键存入键值对中,值初始为1
dict.Add(chs[i], 1);
}
else
{
//值+1
dict[chs[i]]++;
}
}
}
//循环遍历键值对输出
foreach (KeyValuePair
{
Console.WriteLine("数字:{0}出现了{1}次。",item.Key,item.Value); }
Console.ReadKey();
可见,简单的几行代码就解决了。