题目:

预备代码:

 // 自定义输出
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. php中弱语言类型的底层实现

    PHP是弱语言类型,主要分为三类: 1.标量类型:integer.string.float.boolean 2.复合类型:array.object 3.特殊类型:resource.null php是通 ...

  2. Texas Instruments matrix-gui-2.0 hacking -- json.txt

    { "main_menu": { "apps": [ { "Name":"Profiling", ", &qu ...

  3. STM32 PWM输出(映射)

    STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通用定时器也能同时产生多达 4 ...

  4. 轻松玩转AI 与PDF文件的转化(完美解决字体问题)

    经过漫长而坚苦卓绝的研究查阅了网上无数资料下载了众多相关软件进行试验终于,找到搞定PDF文件的方便并且有效的办法PDF文件!你这个魔鬼!退去吧!!!! 难点一: 如何修改客户常常会提供不知道从哪里搞来 ...

  5. Linux系统nat模式联网——VM是12 系统是cantos7

    >点击还原默认设置,然后确定 >选择Vmnet8,VMnet信息自动选中NAT模式 记住子网IP和子网掩码 >点击NAT设置,记住网关IP >点击DHCP.记住IP范围 > ...

  6. centos7安装mysql5.7的终极解决方案

    在centos7中安装最新版本mysql5.7.10可能会出现各种各样的问题,不管出现什么问题,先仔细阅读下面,或许对你有帮助! 1.systemctl stop mysqld.service 关闭m ...

  7. 拒绝了对对象 '****'(数据库 '******',所有者 '***')的 SELECT 权限

    数据库(xxx) --->安全性---->架构---->dbo(属性)--->权限--->添加--->浏览-->public 添加 select 等您需要的权 ...

  8. POJ3276(遍历+区间修改)

    http://poj.org/problem?id=3276 题意:n(n<=5000)头牛站成线,有朝前有朝后的的,然后每次可以选择大小为k的区间里的牛全部转向,会有一个最小操作m次使得它们全 ...

  9. 动画Completed事件里获取执行该动画的UI对象

    转:http://www.cnblogs.com/xyq/p/3775732.html 昨天群里有位童鞋提出如何在动画完成事件Completed里获取到执行该动画的UI对象. WPF里动画的Compl ...

  10. POJ1050最大子矩阵面积

    题目:http://poj.org/problem?id=1050 自己用了n^4的像暴搜一样的方法,感到有点奇怪——真的是这样? #include<iostream> #include& ...