题目:
预备代码:
1 1 // 自定义输出 2 2 var log = function () { 3 3 console.log.apply(this, arguments); 4 4 }; 5 5 6 6 7 7 // ====== 8 8 // 测试 9 9 // ====== 1010 // 1111 // 定义用于测试的函数 1212 // ensure 接受两个参数 1313 // condition 是 bool, 如果为 false, 则输出 message 1414 // 否则, 不做任何处理 1515 var ensure = function(condition, message) { 1616 // 在条件不成立的时候, 输出 message 1717 if(!condition) { 1818 log('*** 测试失败:', message) 1919 } 2020 };
题目代码:
1 1 // 找出字符串中出现次数最多的字母: 2 2 function func(str) { 3 3 var arr = {}; 4 4 // 把每个字母和其对应出现的次数存到对象(字典)中 5 5 for (var i = 0; i < str.length; i++) { 6 6 if (arr[str[i]] === undefined){ 7 7 arr[str[i]] = 1 8 8 } 9 9 else{ 1010 arr[str[i]] += 1 1111 } 1212 } 1313 var max = 0; 1414 var chart = ""; 1515 for(var s in arr){ 1616 var num = arr[s]; 1717 if(num>max){ 1818 max = num; 1919 chart = s; 2020 } 2121 } 2222 log(arr); 2323 log(chart.toString()+max.toString()); 2424 2525 res = chart.toString()+max.toString(); 2626 2727 return res 2828 } 2929 result = func("WelcomeToQianfeng"); 30 31 1 // 分割单词 32 2 var str2={}; 33 3 function word(str1){ 34 4 for(var i=1;i<str1.length;i++){ 35 5 // 思路: 在第一个字母之后 如果发现有大写字母后面是小写字母 就把这个大写字母换成空格和这个大写字母 36 6 // 检测是否为大写字母 37 7 if(/[A-Z]/g.test(str1[i])){ 38 8 // 检测是否是小写字母 39 9 if(/[a-z]/g.test(str1[i-1])){ 4010 str1=str1.replace(str1[i], " "+str1[i]); 4111 } 4212 } 4313 } 4414 // str2是str1的子串(str1第一个字符之后的子串) 4515 str2=str1.substring(1); 4616 log(str1[0]+str2.toLowerCase()); 4717 4818 return str1[0]+str2.toLowerCase(); 4919 } 5020 5121 result = word("HelloMyWorld"); 52 53 1 // 单词逆序 54 2 // Welome to Beijing -> Beijing to Welcome 55 3 // 思路: 先将字符串分割成一个个的词,然后将这些词存入数组中并逆序,最后连接起来即可 56 4 var arr=[]; 57 5 var str3="Welome to Beijing"; 58 6 arr=str3.split(" "); 59 7 var str4=arr.reverse(); 60 8 var res = str4.join(" "); 61 9 log(arr); 6210 log(res); 63 64 1 // 作业 1 65 2 // 字符串s1和字符串s2 但 s2 的长度是 1 返回 s2 在 s1 中的下标, 从 0 开始, 如果不存在则返回 -1 66 3 var find = function(s1, s2) { 67 4 var len = s1.length; 68 5 if(s1.includes(s2)) { 69 6 for (var i = 0; i < len; i++) { 70 7 var str = s1[i]; 71 8 if (str === s2) { 72 9 //log("i 的值:",i) 7310 return i 7411 } 7512 } 7613 } 7714 // log(-1) 7815 return -1 7916 }; 80 81 1 // 作业2-1 82 2 // 返回字符串的小写形式的函数 注意, 这里假设了字符串全是大写字母 83 3 // 这里是两个字符串, 包含了大写字母和小写字母 84 4 var lower = 'abcdefghijklmnopqrstuvwxyz'; 85 5 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 86 6 87 7 var lowercase = function(s) { 88 8 // 初始化一个空字符串 89 9 var result = ""; 9010 for (var i = 0; i < s.length; i++) { 9111 // 注意, 这个 find 是你要实现的函数 9212 var index = find(upper, s[i]); 9313 // 字符串可以用加号拼接, 不明白可以 log 一下 9414 result += lower[index]; 9515 } 9616 return result; 9717 }; 9818 9919 // var test_lowercase = function() { 10020 // ensure(lowercase('SDEW') === 'sdew','测试1失败') 10121 // }; 10222 // test_lowercase(); 10323 10424 10525 // 作业 2-2 10626 // 定义一个函数 参数是一个字符串 返回大写后的字符串 注意字符串全是小写字母 10727 var lower = 'abcdefghijklmnopqrstuvwxyz'; 10828 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 10929 11030 var uppercase = function(s) { 11131 var result = ""; 11232 for (var i = 0; i < s.length; i++) { 11333 var index = find(lower,s[i]); 11434 result += upper[index] 11535 } 11636 return result 11737 }; 11838 11939 // var test_uppercase = function() { 12040 // ensure(uppercase('sdwt') === 'SDWT','测试1失败') 12141 // }; 12242 // test_uppercase(); 123 124 1 // 作业 3 125 2 // 实现 lowercase1 它能正确处理带 小写字母 的字符串s 返回 小写字母 的字符串 126 3 var lower = 'abcdefghijklmnopqrstuvwxyz'; 127 4 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 128 5 var lowercase1 = function(s) { 129 6 var result = ""; 130 7 var len = s.length; 131 8 for (var i = 0; i < len; i++) { 132 9 if (upper.includes(s[i])) { 13310 var index = find(upper,s[i]); 13411 result += lower[index] 13512 //log(result) 13613 }else { 13714 result += s[i] 13815 //log(result) 13916 } 14017 } 14118 return result 14219 }; 14320 14421 // var test_lowercase1 = function() { 14522 // ensure(lowercase1('dadEG') === 'dadeg','测试1失败'); 14623 // ensure(lowercase1('wWedaaLo') === 'wwedaalo','测试2失败'); 14724 // }; 14825 // test_lowercase1(); 14926 15027 15128 // 作业 4 15229 // 实现 uppercase1 它能正确处理带 大写字母 的字符串 返回 大写字母 的字符串 15330 var uppercase1 = function(s) { 15431 var result = ""; 15532 var len = s.length; 15633 for (var i = 0; i < len; i++) { 15734 if (lower.includes(s[i])) { 15835 var index = find(lower,s[i]); 15936 result += upper[index]; 16037 // log(result) 16138 }else { 16239 result += s[i]; 16340 // log(result) 16441 } 16542 } 16643 return result 16744 }; 16845 16946 // var test_uppercase1 = function() { 17047 // ensure(uppercase1('dadEG') === 'DADEG','测试1失败'); 17148 // ensure(uppercase1('wWedaaLo') === 'WWEDAALO','测试2失败'); 17249 // }; 17350 // test_uppercase1(); 174 175 1 // 作业 5 176 2 // 实现一个叫 凯撒加密 的加密算法, 描述如下: 177 3 // 对于一个字符串, 整体移位, 就是加密 178 4 // 以右移 1 位为例 原始信息 'afz' 会被加密为 'bga' 179 5 // 实现 encode1 函数, 把明文加密成密码并返回 右移 1 位 180 6 // 注意, 假设字符串一定只包含小写字符 181 7 var lower = 'abcdefghijklmnopqrstuvwxyz'; 182 8 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 183 9 var encode1 = function(s) { 184 10 var result = ""; 185 11 var len = s.length; 186 12 for (var i = 0; i < len; i++) { 187 13 var sl = s[i]; 188 14 var index = find(lower,s[i]); 189 15 if (s[i] === 'z') { 190 16 result += lower[0] 191 17 }else { 192 18 result += lower[index+1] 193 19 } 194 20 } 195 21 return result 196 22 }; 197 23 198 24 // var test_encode1 = function() { 199 25 // ensure(encode1('afz') === 'bga', "encode1测试1"); 200 26 // ensure(encode1('crp') === 'dsq', "encode1测试2"); 201 27 // }; 202 28 // test_encode1(); 203 29 204 30 205 31 // 作业 6 206 32 // 实现 decode1 函数, 把作业 5 加密的密码解密为明文并返回 207 33 var decode1 = function(s) { 208 34 var result = ""; 209 35 var len = s.length; 210 36 for (var i = 0; i < len; i++) { 211 37 var index = find(lower,s[i]); 212 38 if (s[i] === lower[0]) { 213 39 result += lower[25] 214 40 }else { 215 41 result += lower[index-1] 216 42 } 217 43 } 218 44 return result 219 45 }; 220 46 221 47 // var test_decode1 = function() { 222 48 // ensure(decode1('bga') === 'afz', "decode1测试1"); 223 49 // ensure(decode1('dsq') ==='crp', "decode1测试2"); 224 50 // }; 225 51 // test_decode1(); 226 52 227 53 228 54 // 作业 7 229 55 // 实现 encode2 相比encode1多了一个参数 shift 表示移的位移 230 56 var lower = 'abcdefghijklmnopqrstuvwxyz'; 231 57 var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 232 58 var encode2 = function(s, shift) { 233 59 var result = ""; 234 60 var len = s.length; 235 61 for (var i = 0; i < len; i++) { 236 62 var sl = s[i]; 237 63 var index = find(lower,s[i]); 238 64 if (index + shift >= 26) { 239 65 result += lower[index + shift - 26] 240 66 }else { 241 67 result += lower[index + shift] 242 68 } 243 69 } 244 70 return result 245 71 }; 246 72 247 73 // var test_encode2 = function() { 248 74 // ensure(encode2('afz',1) === 'bga', "encode2测试1"); 249 75 // ensure(encode2('mxc',5) === 'rch', "encode2测试2"); 250 76 // }; 251 77 // test_encode2(); 252 78 253 79 254 80 // 作业 8 255 81 // 实现 decode2 相比decode1多了一个参数 shift 表示移的位数 256 82 var decode2 = function(s, shift) { 257 83 var result = ""; 258 84 var len = s.length; 259 85 for (var i = 0; i < len; i++) { 260 86 var index = find(lower,s[i]); 261 87 if (index - shift < 0) { 262 88 result += lower[index - shift + 26] 263 89 }else { 264 90 result += lower[index - shift] 265 91 } 266 92 } 267 93 return result 268 94 }; 269 95 270 96 // var test_decode2 = function() { 271 97 // ensure(decode2('afz',1) === 'zey', "decode2测试1"); 272 98 // ensure(decode2('mxc',5) === 'hsx', "decode2测试2"); 273 99 // }; 274100 // test_decode2(); 275101 276102 /* 277103 作业 9 278104 实现 encode3 279105 多了一个参数 shift 表示移的位数 280106 如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样 281107 */ 282108 var encode3 = function(s, shift) { 283109 var str = lowercase1(s); 284110 var result = ""; 285111 var len = s.length; 286112 for (var i = 0; i < len; i++) { 287113 if (lower.includes(str[i])) { 288114 result += encode2(str[i],shift) 289115 } 290116 else { 291117 result += str[i] 292118 } 293119 } 294120 return result 295121 }; 296122 297123 // var test_encode3 = function() { 298124 // ensure(encode3('5465WD4afz',1) === '5465xe4bga', "encode3测试1"); 299125 // ensure(encode3(' 5~m@365!xc',5) === ' 5~r@365!ch', "encode3测试2"); 300126 // }; 301127 // test_encode3(); 302128 303129 304130 /* 305131 作业 10 306132 实现 decode3 307133 多了一个参数 shift 表示移的位数 308134 如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样 309135 */ 310136 var decode3 = function(s, shift) { 311137 var str = lowercase1(s); 312138 var result = ""; 313139 var len = str.length; 314140 for (var i = 0; i < len; i++) { 315141 if (lower.includes(str[i])) { 316142 result += decode2(str[i],shift) 317143 } 318144 else { 319145 result += str[i] 320146 } 321147 } 322148 return result 323149 }; 324150 325151 // var test_decode3 = function() { 326152 // ensure(decode3('W2玩儿3af$%(SD)z',1) === 'v2玩儿3ze$%(rc)y', "decode3测试1"); 327153 // ensure(decode3('mW嗲2+*/.,xDW3c',5) === 'hr嗲2+*/.,syr3x', "decode3测试2"); 328154 // }; 329155 // test_decode3();