计算字符串中每种字符出现的次数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 dict = new 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 item in dict)

{

Console.WriteLine("数字:{0}出现了{1}次。",item.Key,item.Value); }

Console.ReadKey();

可见,简单的几行代码就解决了。

相关文档
最新文档