您的位置:首页 > 职场人生

黑马程序员-计算字符串中每种字符出现的次数

2013-09-24 16:32 176 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

题目:计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”……

解题思路:

1、将字符串统一转为大写或者小写(string.upper()方法),然后把重复的字符筛选掉(for循环,向新字符串中依次填加原字符串中的字符,遇到重复则跳过),产生一个新的字符串。

2、用新的字符串中的字符和原字符串中的比较(for()循环比较是否相等,相等则次数加1),依次把每个字符出现的次数存入到一个int数组中

后话:这个是我测试里面感觉最难的,当时看到这个题真是一点思路也没有,差点就跑到网上去乱查了,后来静下心来之后,一步步思考,然后把思路整理下来,再写出了代码,后来发现程序中把string类型转换为char类型完成没有必要,string类型可以直接当作char数组类型来操作,又再修改,最后做出了让自己满意的答案。在网上看了一下,当然有更好,但相对我这个来说,实现的难度可能要大一些。

通过这个程序我感觉到规划好解题思路真的非常重要,实在不行就一步步写出来,“一步步思考,整理好思路,一步步实现,最后再修改”……

代码如下:

class Program
{
/// <summary>
/// 计算字符串中每种字符出现的次数。“Welcome to Chinaworld”,不区分大小写,打印“W 2”“e 2”“l 3”……
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
/*编程思路:新建一个string类型变量,把原存储的字符串中的字符去除掉重复后依次添加到新字符串中,
然后用新字符串的每个字符与旧字符串比较,得到新字符串的每个字符在原字符串中重复出现的次数*/

string str = "Welcome to Chinaworld".ToUpper(); //将字符串中的字母转化为大写字母
string newStr = "";    //定义一个字符串变量,接收去除掉重复元素后的字符串

for (int i = 0; i < str.Length; i++)  //使用循环结构,比较原字符串和新字符串中的字符,并将每个不重复的字符累加到新字符串上
{
if (newStr.Length <= 1)   //当新字符串的长度小于等于1时,直接将原字符串中的字符,累加到新字符串上
newStr += str[i];
else
{
bool isSame = true; //定义bool变量,初始为true,当有重复字符串时,为false;
for (int j = 0; j < newStr.Length; j++) //循环新字符串中的字符,避免将重复的字符累加到新的字符串上
{
if (str[i] == newStr[j]) //当原字符串字符等于新字符串中的某个字符时
{
isSame = false;
}
}
if (!isSame)   //为false时,跳过将当前重复的字符累加到新字符串中,并直接开始下一次循环
continue;
newStr += str[i];
}
}
int[] arrInt = new int[newStr.Length]; //定义整数数组,存储每个字符在原字符串中重复出现的次数

for (int i = 0; i < newStr.Length; i++)
{
for (int j = 0; j < str.Length; j++)
{
if (newStr[i] == str[j]) //字符依次与原字符串中的字符比较,相等时,累加1,统计出重复的次数
arrInt[i]++;
}
}

for (int i = 0; i < newStr.Length; i++)  //循环输出每个字符重复的次数(包含空格)
{
Console.Write("“{0}  {1}次”", newStr[i], arrInt[i]);
}

Console.ReadKey();
}
}


欢迎有高手前来指导,提出问题。。。

----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#