题目:
预备代码:
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();