JavaScript字符串练习

Stella981
• 阅读 567

题目:

预备代码:

 1 // 自定义输出
 2     var log = function () {
 3         console.log.apply(this, arguments);
 4     };
 5 
 6 
 7     // ======
 8     // 测试
 9     // ======
10     //
11     // 定义用于测试的函数
12     // ensure 接受两个参数
13     // condition 是 bool, 如果为 false, 则输出 message
14     // 否则, 不做任何处理
15     var ensure = function(condition, message) {
16         // 在条件不成立的时候, 输出 message
17         if(!condition) {
18             log('*** 测试失败:', message)
19         }
20     };

题目代码:

 1 // 找出字符串中出现次数最多的字母:
 2 function func(str) {
 3     var arr = {};
 4     // 把每个字母和其对应出现的次数存到对象(字典)中
 5     for (var i = 0; i < str.length; i++) {
 6         if (arr[str[i]] === undefined){
 7             arr[str[i]] = 1
 8         }
 9         else{
10             arr[str[i]] += 1
11         }
12     }
13     var max = 0;
14     var chart = "";
15     for(var s in arr){
16         var num = arr[s];
17         if(num>max){
18             max = num;
19             chart = s;
20         }
21     }
22     log(arr);
23     log(chart.toString()+max.toString());
24 
25     res = chart.toString()+max.toString();
26 
27     return res
28 }
29 result = func("WelcomeToQianfeng");

 1 // 分割单词
 2 var str2={};
 3 function word(str1){
 4     for(var i=1;i<str1.length;i++){
 5         // 思路: 在第一个字母之后 如果发现有大写字母后面是小写字母 就把这个大写字母换成空格和这个大写字母
 6         // 检测是否为大写字母
 7         if(/[A-Z]/g.test(str1[i])){
 8             // 检测是否是小写字母
 9             if(/[a-z]/g.test(str1[i-1])){
10                 str1=str1.replace(str1[i], " "+str1[i]);
11             }
12         }
13     }
14     // str2是str1的子串(str1第一个字符之后的子串)
15     str2=str1.substring(1);
16     log(str1[0]+str2.toLowerCase());
17 
18     return str1[0]+str2.toLowerCase();
19 }
20 
21 result = word("HelloMyWorld");

 1 // 单词逆序
 2 // Welome to Beijing -> Beijing to Welcome
 3 // 思路: 先将字符串分割成一个个的词,然后将这些词存入数组中并逆序,最后连接起来即可
 4 var arr=[];
 5 var str3="Welome to Beijing";
 6 arr=str3.split(" ");
 7 var str4=arr.reverse();
 8 var res = str4.join(" ");
 9 log(arr);
10 log(res);

 1 // 作业 1
 2 // 字符串s1和字符串s2  但 s2 的长度是 1  返回 s2 在 s1 中的下标, 从 0 开始, 如果不存在则返回 -1
 3 var find = function(s1, s2) {
 4     var len = s1.length;
 5     if(s1.includes(s2)) {
 6         for (var i = 0; i < len; i++) {
 7             var str = s1[i];
 8             if (str === s2) {
 9                 //log("i 的值:",i)
10                 return i
11             }
12         }
13     }
14     // log(-1)
15     return -1
16 };

 1 // 作业2-1
 2 // 返回字符串的小写形式的函数  注意, 这里假设了字符串全是大写字母
 3 // 这里是两个字符串, 包含了大写字母和小写字母
 4 var lower = 'abcdefghijklmnopqrstuvwxyz';
 5 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 6 
 7 var lowercase = function(s) {
 8     // 初始化一个空字符串
 9     var result = "";
10     for (var i = 0; i < s.length; i++) {
11         // 注意, 这个 find 是你要实现的函数
12         var index = find(upper, s[i]);
13         // 字符串可以用加号拼接, 不明白可以 log 一下
14         result += lower[index];
15     }
16     return result;
17 };
18 
19 // var test_lowercase = function() {
20 //     ensure(lowercase('SDEW') === 'sdew','测试1失败')
21 // };
22 // test_lowercase();
23 
24 
25 // 作业 2-2
26 // 定义一个函数  参数是一个字符串 返回大写后的字符串 注意字符串全是小写字母
27 var lower = 'abcdefghijklmnopqrstuvwxyz';
28 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
29 
30 var uppercase = function(s) {
31     var result = "";
32     for (var i = 0; i < s.length; i++) {
33         var index = find(lower,s[i]);
34         result += upper[index]
35     }
36     return result
37 };
38 
39 // var test_uppercase = function() {
40 //     ensure(uppercase('sdwt') === 'SDWT','测试1失败')
41 // };
42 // test_uppercase();

 1 // 作业 3
 2 // 实现 lowercase1 它能正确处理带 小写字母 的字符串s   返回 小写字母 的字符串
 3 var lower = 'abcdefghijklmnopqrstuvwxyz';
 4 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 5 var lowercase1 = function(s) {
 6     var result = "";
 7     var len = s.length;
 8     for (var i = 0; i < len; i++) {
 9         if (upper.includes(s[i])) {
10             var index = find(upper,s[i]);
11             result += lower[index]
12             //log(result)
13         }else {
14             result += s[i]
15             //log(result)
16         }
17     }
18     return result
19 };
20 
21 // var test_lowercase1 = function() {
22 //     ensure(lowercase1('dadEG') === 'dadeg','测试1失败');
23 //     ensure(lowercase1('wWedaaLo') === 'wwedaalo','测试2失败');
24 // };
25 // test_lowercase1();
26 
27 
28 // 作业 4
29 // 实现 uppercase1  它能正确处理带 大写字母 的字符串   返回 大写字母 的字符串
30 var uppercase1 = function(s) {
31     var result = "";
32     var len = s.length;
33     for (var i = 0; i < len; i++) {
34         if (lower.includes(s[i])) {
35             var index = find(lower,s[i]);
36             result += upper[index];
37             // log(result)
38         }else {
39             result += s[i];
40             // log(result)
41         }
42     }
43     return result
44 };
45 
46 // var test_uppercase1 = function() {
47 //     ensure(uppercase1('dadEG') === 'DADEG','测试1失败');
48 //     ensure(uppercase1('wWedaaLo') === 'WWEDAALO','测试2失败');
49 // };
50 // test_uppercase1();

  1 // 作业 5
  2 // 实现一个叫 凯撒加密 的加密算法, 描述如下:
  3 // 对于一个字符串, 整体移位, 就是加密
  4 // 以右移 1 位为例 原始信息 'afz' 会被加密为 'bga'
  5 // 实现 encode1 函数, 把明文加密成密码并返回 右移 1 位
  6 // 注意, 假设字符串一定只包含小写字符
  7 var lower = 'abcdefghijklmnopqrstuvwxyz';
  8 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  9 var encode1 = function(s) {
 10     var result = "";
 11     var len = s.length;
 12     for (var i = 0; i < len; i++) {
 13         var sl = s[i];
 14         var index = find(lower,s[i]);
 15         if (s[i] === 'z') {
 16             result += lower[0]
 17         }else {
 18             result += lower[index+1]
 19         }
 20     }
 21     return result
 22 };
 23 
 24 // var test_encode1 = function() {
 25 //     ensure(encode1('afz') === 'bga', "encode1测试1");
 26 //     ensure(encode1('crp') === 'dsq', "encode1测试2");
 27 // };
 28 // test_encode1();
 29 
 30 
 31 // 作业 6
 32 // 实现 decode1 函数, 把作业 5 加密的密码解密为明文并返回
 33 var decode1 = function(s) {
 34     var result = "";
 35     var len = s.length;
 36     for (var i = 0; i < len; i++) {
 37         var index = find(lower,s[i]);
 38         if (s[i] === lower[0]) {
 39             result += lower[25]
 40         }else {
 41             result += lower[index-1]
 42         }
 43     }
 44     return result
 45 };
 46 
 47 // var test_decode1 = function() {
 48 //     ensure(decode1('bga') === 'afz', "decode1测试1");
 49 //     ensure(decode1('dsq') ==='crp', "decode1测试2");
 50 // };
 51 // test_decode1();
 52 
 53 
 54 // 作业 7
 55 // 实现 encode2 相比encode1多了一个参数 shift 表示移的位移
 56 var lower = 'abcdefghijklmnopqrstuvwxyz';
 57 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 58 var encode2 = function(s, shift) {
 59     var result = "";
 60     var len = s.length;
 61     for (var i = 0; i < len; i++) {
 62         var sl = s[i];
 63         var index = find(lower,s[i]);
 64         if (index + shift >= 26) {
 65             result += lower[index + shift - 26]
 66         }else {
 67             result += lower[index + shift]
 68         }
 69     }
 70     return result
 71 };
 72 
 73 // var test_encode2 = function() {
 74 //     ensure(encode2('afz',1) === 'bga', "encode2测试1");
 75 //     ensure(encode2('mxc',5) === 'rch', "encode2测试2");
 76 // };
 77 // test_encode2();
 78 
 79 
 80 // 作业 8
 81 // 实现 decode2 相比decode1多了一个参数 shift 表示移的位数
 82 var decode2 = function(s, shift) {
 83     var result = "";
 84     var len = s.length;
 85     for (var i = 0; i < len; i++) {
 86         var index = find(lower,s[i]);
 87         if (index - shift < 0) {
 88             result += lower[index - shift + 26]
 89         }else {
 90             result += lower[index - shift]
 91         }
 92     }
 93     return result
 94 };
 95 
 96 // var test_decode2 = function() {
 97 //     ensure(decode2('afz',1) === 'zey', "decode2测试1");
 98 //     ensure(decode2('mxc',5) === 'hsx', "decode2测试2");
 99 // };
100 // test_decode2();
101 
102 /*
103 作业 9
104 实现 encode3
105 多了一个参数 shift 表示移的位数
106 如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
107 */
108 var encode3 = function(s, shift) {
109     var str = lowercase1(s);
110     var result = "";
111     var len = s.length;
112     for (var i = 0; i < len; i++) {
113         if (lower.includes(str[i])) {
114             result += encode2(str[i],shift)
115         }
116         else {
117             result += str[i]
118         }
119     }
120     return result
121 };
122 
123 // var test_encode3 = function() {
124 //     ensure(encode3('5465WD4afz',1) === '5465xe4bga', "encode3测试1");
125 //     ensure(encode3(' 5~m@365!xc',5) === ' 5~r@365!ch', "encode3测试2");
126 // };
127 // test_encode3();
128 
129 
130 /*
131 作业 10
132 实现 decode3
133 多了一个参数 shift 表示移的位数
134 如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
135 */
136 var decode3 = function(s, shift) {
137     var str = lowercase1(s);
138     var result = "";
139     var len = str.length;
140     for (var i = 0; i < len; i++) {
141         if (lower.includes(str[i])) {
142             result += decode2(str[i],shift)
143         }
144         else {
145             result += str[i]
146         }
147     }
148     return result
149 };
150 
151 // var test_decode3 = function() {
152 //     ensure(decode3('W2玩儿3af$%(SD)z',1) === 'v2玩儿3ze$%(rc)y', "decode3测试1");
153 //     ensure(decode3('mW嗲2+*/.,xDW3c',5) === 'hr嗲2+*/.,syr3x', "decode3测试2");
154 // };
155 // test_decode3();
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这