欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

access 删除字符串中的字符_统计字符串中每个字符出现的次数

程序员文章站 2022-04-17 22:36:12
...

    今天是js基础的最后一天。晚自习做的测试。

    关于这次测试感觉蛮可惜的,至少错一道题,多则四五道。

access 删除字符串中的字符_统计字符串中每个字符出现的次数

    这一道题选择C,因为C是显性类型转换。

其余选项,

A、字符串拼接—Number转字符串。    

B、字符串转Number。

D、任意类型转换成布尔型

    其他的题今天不说,如果真的有错的我会无能狂怒一会儿。


    今天的主角是一道大题,不说有多难,但是很巧妙。

题目如下:

统计字符串 'abcoefoxyozzopp' 中每个字符出现的次数。

    先说我写的方法:

 var str = 'abcoefoxyozzopp';    var arr = [];    var num = 0;    // 计数器    // 将字符串转换成数组    for (var i = 0; i         arr[i] = str.charAt(i);    }    // 数组排序        arr.sort();    // 见后文     for (var i = 0; i          if (arr[i] != arr[i + 1]) {         document.write(arr[i] + ":" + ++num + "个" + "
");         num = 0;      }else {          num++;                                   }}

    首先我要说这并不是一个很聪明的办法。不过,用的知识点相对较少,逻辑方面也比较好理解。

    先来说一下思路:

    1、将字符串排序,排序方法用的是转换成数组,然后用数组的内置排序方法Array.sort();

    2、排序过后重复的代码就会‘扎堆’出现在一起,这是我们只需要对比前后两个字符是否相同,如果相同就让计数器加1,如果不同就返回计数器的数。(可以参考一下斐波那契函数的思考方式)

    转换数组我用了一个相对愚蠢的方法——字符串指定‘索引’获取值+for循环。相比较有一个更好的方法是使用字符串自带的转数组方法:String.split()。

注意:这里的参数写空字符串“”,否则会返回一个整体。

    之后的代码就很好理解了,但是仍然要提示一点的是,计数器num是一个全局变量。因为每一次for循环都可能改变计数器的值,所以在计算完一个字符并输出之后一定要记着将计数器归零。


    还有一个很不错的想法,同样是比较好理解的。

var str = 'abcoefoxyozzopp';//循环的套出每个字符出现的次数 str会慢慢的变短直到为空while (str != "") {  //字符串转数组  var arr = str.split("");  var num = 0;  //求第一个字符出现的次数  for (var i = 0; i < arr.length; i++) {     if (arr[0] == arr[i]) {         num++;     }   }   //在字符串中删掉跟第一个字符一样的所有字符   var re = arr[0];   str = str.replace(re, "");   document.write(arr[0] + ":" + num + "个" + "
");   }

    这一方法的难度是在于想到这一方法。一旦有了思路代码就脱口而出了。

    思路:

    我们只需要专心统计每一个值,统计完之后删除即可。最后我们会把所有的字符全部删掉,当字符串为空时结束循环。

    需要说明一下,删除数组元素的方法有很多,我选择了一个相对比较简单的——数组元素替换(String.replace(x,y);).其他方式都可以,今天也学了很多,自己可以玩一玩,不一一举例了。

    如果发现这一步很难进行下去可以选择性的放弃。不过有w3cschool,菜鸟教程,MDN,我相信问题应该不大。


    最后一个也是我想着重说的一个,需要一定的编程思想,不过这个‘一定’也只是一丢丢。

var str = 'abcoefoxyozzopp';var obj = {};var i = 0;for (i = 0; i < str.length; i++) {  key = str[i];  if (obj[key]) {     //对象中有这个字母     obj[key]++;   }else {     //对象中没有这个字母,把字母加到对象中      obj[key] = 1;   }}//遍历这个对象 for (var key in obj){  document.write(key + ":" + obj[key] + "个" + "
");}

    使用这个方法是最"标准"的,通过键值对的方式输出字符串中出现的字符和字符的个数。

    我们把键当做字符,value当做计数器。

值得注意的有两点:

    1、声明变量的时候不要赋值undefined。第一篇关于JS的笔记就说了,undefined有自身的含义,所以永远不要显性将对象设置为undefined

    2、第一步判断 if (obj[key]) {},如果obj[key]没有初始化的话,值为undefined,undefined转换为布尔型是flase,此时向value中添加计时器。

    使用这种方法我们不用将字符串变成数组,因为我们只需要遍历字符串即可,不需要做任何修改。而字符串是可以通过‘索性’遍历的。

    为了安慰同桌小姐姐说这个方法不太重要,实际上自己都觉得有点些违心access 删除字符串中的字符_统计字符串中每个字符出现的次数。不过没关系,我们才学到基础。API也是基础。学到高级再理解这几行代码应该就so easy了access 删除字符串中的字符_统计字符串中每个字符出现的次数

补充一点:

    如果我们可以想到这种思路,那对于这种方法我们可以将其简写成:

for (var i = 0, l = str.length; i < l; i++) {  obj[str[i]] = (obj[str[i]] + 1) || 1;}

    没错就是短路运算(第一篇笔记中也有写过)。


最后的废话。

    又一次分别,这次是博哥。物是人非事事休,欲语泪先流。

    明天是老狗,狗哥,MC HotDog,我是差不多先生~

    API,DOM真的很重要!

    这次也许真的会掉头发!