---------------------- 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培训、期待与您交流! ----------------------