题目:

预备代码:

 // 自定义输出
var log = function () {
console.log.apply(this, arguments);
}; // ======
// 测试
// ======
//
// 定义用于测试的函数
// ensure 接受两个参数
// condition 是 bool, 如果为 false, 则输出 message
// 否则, 不做任何处理
var ensure = function(condition, message) {
// 在条件不成立的时候, 输出 message
if(!condition) {
log('*** 测试失败:', message)
}
};

题目代码:

 // 找出字符串中出现次数最多的字母:
function func(str) {
var arr = {};
// 把每个字母和其对应出现的次数存到对象(字典)中
for (var i = 0; i < str.length; i++) {
if (arr[str[i]] === undefined){
arr[str[i]] = 1
}
else{
arr[str[i]] += 1
}
}
var max = 0;
var chart = "";
for(var s in arr){
var num = arr[s];
if(num>max){
max = num;
chart = s;
}
}
log(arr);
log(chart.toString()+max.toString()); res = chart.toString()+max.toString(); return res
}
result = func("WelcomeToQianfeng");
 // 分割单词
var str2={};
function word(str1){
for(var i=1;i<str1.length;i++){
// 思路: 在第一个字母之后 如果发现有大写字母后面是小写字母 就把这个大写字母换成空格和这个大写字母
// 检测是否为大写字母
if(/[A-Z]/g.test(str1[i])){
// 检测是否是小写字母
if(/[a-z]/g.test(str1[i-1])){
str1=str1.replace(str1[i], " "+str1[i]);
}
}
}
// str2是str1的子串(str1第一个字符之后的子串)
str2=str1.substring(1);
log(str1[0]+str2.toLowerCase()); return str1[0]+str2.toLowerCase();
} result = word("HelloMyWorld");

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

 // 作业 1
// 字符串s1和字符串s2 但 s2 的长度是 1 返回 s2 在 s1 中的下标, 从 0 开始, 如果不存在则返回 -1
var find = function(s1, s2) {
var len = s1.length;
if(s1.includes(s2)) {
for (var i = 0; i < len; i++) {
var str = s1[i];
if (str === s2) {
//log("i 的值:",i)
return i
}
}
}
// log(-1)
return -1
};
 // 作业2-1
// 返回字符串的小写形式的函数 注意, 这里假设了字符串全是大写字母
// 这里是两个字符串, 包含了大写字母和小写字母
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var lowercase = function(s) {
// 初始化一个空字符串
var result = "";
for (var i = 0; i < s.length; i++) {
// 注意, 这个 find 是你要实现的函数
var index = find(upper, s[i]);
// 字符串可以用加号拼接, 不明白可以 log 一下
result += lower[index];
}
return result;
}; // var test_lowercase = function() {
// ensure(lowercase('SDEW') === 'sdew','测试1失败')
// };
// test_lowercase(); // 作业 2-2
// 定义一个函数 参数是一个字符串 返回大写后的字符串 注意字符串全是小写字母
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var uppercase = function(s) {
var result = "";
for (var i = 0; i < s.length; i++) {
var index = find(lower,s[i]);
result += upper[index]
}
return result
}; // var test_uppercase = function() {
// ensure(uppercase('sdwt') === 'SDWT','测试1失败')
// };
// test_uppercase();

 // 作业 3
// 实现 lowercase1 它能正确处理带 小写字母 的字符串s 返回 小写字母 的字符串
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var lowercase1 = function(s) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
if (upper.includes(s[i])) {
var index = find(upper,s[i]);
result += lower[index]
//log(result)
}else {
result += s[i]
//log(result)
}
}
return result
}; // var test_lowercase1 = function() {
// ensure(lowercase1('dadEG') === 'dadeg','测试1失败');
// ensure(lowercase1('wWedaaLo') === 'wwedaalo','测试2失败');
// };
// test_lowercase1(); // 作业 4
// 实现 uppercase1 它能正确处理带 大写字母 的字符串 返回 大写字母 的字符串
var uppercase1 = function(s) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
if (lower.includes(s[i])) {
var index = find(lower,s[i]);
result += upper[index];
// log(result)
}else {
result += s[i];
// log(result)
}
}
return result
}; // var test_uppercase1 = function() {
// ensure(uppercase1('dadEG') === 'DADEG','测试1失败');
// ensure(uppercase1('wWedaaLo') === 'WWEDAALO','测试2失败');
// };
// test_uppercase1();
 // 作业 5
// 实现一个叫 凯撒加密 的加密算法, 描述如下:
// 对于一个字符串, 整体移位, 就是加密
// 以右移 1 位为例 原始信息 'afz' 会被加密为 'bga'
// 实现 encode1 函数, 把明文加密成密码并返回 右移 1 位
// 注意, 假设字符串一定只包含小写字符
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var encode1 = function(s) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
var sl = s[i];
var index = find(lower,s[i]);
if (s[i] === 'z') {
result += lower[0]
}else {
result += lower[index+1]
}
}
return result
}; // var test_encode1 = function() {
// ensure(encode1('afz') === 'bga', "encode1测试1");
// ensure(encode1('crp') === 'dsq', "encode1测试2");
// };
// test_encode1(); // 作业 6
// 实现 decode1 函数, 把作业 5 加密的密码解密为明文并返回
var decode1 = function(s) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
var index = find(lower,s[i]);
if (s[i] === lower[0]) {
result += lower[25]
}else {
result += lower[index-1]
}
}
return result
}; // var test_decode1 = function() {
// ensure(decode1('bga') === 'afz', "decode1测试1");
// ensure(decode1('dsq') ==='crp', "decode1测试2");
// };
// test_decode1(); // 作业 7
// 实现 encode2 相比encode1多了一个参数 shift 表示移的位移
var lower = 'abcdefghijklmnopqrstuvwxyz';
var upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var encode2 = function(s, shift) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
var sl = s[i];
var index = find(lower,s[i]);
if (index + shift >= 26) {
result += lower[index + shift - 26]
}else {
result += lower[index + shift]
}
}
return result
}; // var test_encode2 = function() {
// ensure(encode2('afz',1) === 'bga', "encode2测试1");
// ensure(encode2('mxc',5) === 'rch', "encode2测试2");
// };
// test_encode2(); // 作业 8
// 实现 decode2 相比decode1多了一个参数 shift 表示移的位数
var decode2 = function(s, shift) {
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
var index = find(lower,s[i]);
if (index - shift < 0) {
result += lower[index - shift + 26]
}else {
result += lower[index - shift]
}
}
return result
}; // var test_decode2 = function() {
// ensure(decode2('afz',1) === 'zey', "decode2测试1");
// ensure(decode2('mxc',5) === 'hsx', "decode2测试2");
// };
// test_decode2(); /*
作业 9
实现 encode3
多了一个参数 shift 表示移的位数
如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
*/
var encode3 = function(s, shift) {
var str = lowercase1(s);
var result = "";
var len = s.length;
for (var i = 0; i < len; i++) {
if (lower.includes(str[i])) {
result += encode2(str[i],shift)
}
else {
result += str[i]
}
}
return result
}; // var test_encode3 = function() {
// ensure(encode3('5465WD4afz',1) === '5465xe4bga', "encode3测试1");
// ensure(encode3(' 5~m@365!xc',5) === ' 5~r@365!ch', "encode3测试2");
// };
// test_encode3(); /*
作业 10
实现 decode3
多了一个参数 shift 表示移的位数
如果 s 中包含了不是字母的字符, 比如空格或者其他符号, 则对这个字符不做处理保留原样
*/
var decode3 = function(s, shift) {
var str = lowercase1(s);
var result = "";
var len = str.length;
for (var i = 0; i < len; i++) {
if (lower.includes(str[i])) {
result += decode2(str[i],shift)
}
else {
result += str[i]
}
}
return result
}; // var test_decode3 = function() {
// ensure(decode3('W2玩儿3af$%(SD)z',1) === 'v2玩儿3ze$%(rc)y', "decode3测试1");
// ensure(decode3('mW嗲2+*/.,xDW3c',5) === 'hr嗲2+*/.,syr3x', "decode3测试2");
// };
// test_decode3();
												

JavaScript字符串练习的更多相关文章

  1. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  2. JavaScript 字符串操作

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  3. JavaScript 字符串常用操作

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  4. JavaScript 字符串(String) 对象

    JavaScript 字符串(String) 对象 String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". ...

  5. IE JavaScript字符串转换成Date后出现NaN错误

    参考的博文:http://blog.csdn.net/zhu7478848/article/details/53388582 在IE浏览器下, JavaScript字符串转换成Date后会出现NaN错 ...

  6. JavaScript 字符串常用操作纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  7. JavaScript字符串插入、删除、替换函数

    JavaScript字符串插入.删除.替换函数 说明: 以下函数中前两个函数取出查找字符串的前一部分和后一部分,以用于其他函数.注意,调用一次 replaceString(mainStr,search ...

  8. javascript 字符串方法传参

    javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type= ...

  9. JavaScript 字符串(String)对象

    String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...

  10. step_by_step_记录一个javascript字符串处理问题

    记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...

随机推荐

  1. 国内Ubuntu镜像源

    国内有很多Ubuntu的镜像源,包括阿里的.网易的,还有很多教育网的源,比如:清华源.中科大源. 我们这里以中科大的源为例讲解如何修改Ubuntu 18.04里面默认的源. 编辑/etc/apt/so ...

  2. HPU 1437: 王小二的求值问题

    1437: 王小二的求值问题 时间限制: 1 Sec 内存限制: 128 MB提交: 141 解决: 31 统计 题目描述 题意超级简单,求一个序列的次大值. 输入 多组输入,每个测试实例占两行,包括 ...

  3. python 取整

    1.向下取整 向下取整直接用内建的 int() 函数即可: >>> a = 3.75 >>> int(a) 3 2.四舍五入 对数字进行四舍五入用 round()  ...

  4. leetcode:Palindrome Number【Python版】

    一次AC 题目要求中有空间限制,因此没有采用字符串由量变向中间逐个对比的方法,而是采用计算翻转之后的数字与x是否相等的方法: class Solution: # @return a boolean d ...

  5. stenciljs 学习十 服务器端渲染

      stenciljs提供了 ssr 支持,对于express 最简单的就是使用提供的中间件 express 集成 const express = require('express'); const ...

  6. sql server CLR

    1. 配置sql server 启用CLR 在SQL Server2005/2008里面,CLR默认是关闭的.可以使用如下SQL语句开启CLR. sp_configure 'show advanced ...

  7. 理解git

    为了真正了解git,我们从底部.底层开始,了解git核心,知其然并知其所以然. 为什么要进行版本控制呢? 因为编写文件不可能一次到位,文件总是有不同的状态需要保存下来,方便以后出错回滚. git 是目 ...

  8. python之 利用字典与函数实现switch case功能

    Python不像C/C++,Java等有switch-case的语法.不过其这个功能,比如用Dictionary以及lambda匿名函数特性来替代实现. 字典+函数实现switch模式下的四则运算:( ...

  9. FormData 知识点

    通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因此可以独立于表单使用. 如果你把表单的编码类型设置为multipart/for ...

  10. Spring boot 使用的注解有哪些?

    Spring boot 使用的注解有哪些? 注解 作用 @SpringBootApplication 等价于 @Configuration + @EnableAutoConfiguration + @ ...