JavaScript字符串练习
题目:
预备代码:
// 自定义输出
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字符串练习的更多相关文章
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- JavaScript 字符串操作
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- JavaScript 字符串常用操作
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象 String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". ...
- IE JavaScript字符串转换成Date后出现NaN错误
参考的博文:http://blog.csdn.net/zhu7478848/article/details/53388582 在IE浏览器下, JavaScript字符串转换成Date后会出现NaN错 ...
- JavaScript 字符串常用操作纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- JavaScript字符串插入、删除、替换函数
JavaScript字符串插入.删除.替换函数 说明: 以下函数中前两个函数取出查找字符串的前一部分和后一部分,以用于其他函数.注意,调用一次 replaceString(mainStr,search ...
- javascript 字符串方法传参
javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: ' <td align="left"><input type= ...
- JavaScript 字符串(String)对象
String 对象用于处理已有的字符块. JavaScript 字符串 一个字符串用于存储一系列字符就像 "John Doe". 一个字符串可以使用单引号或双引号: 实例 var ...
- step_by_step_记录一个javascript字符串处理问题
记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...
随机推荐
- python3 线性同余发生器 ( random 随机数生成器 ) 伪随机数产生周期的一些探究
import random x=[str(random.randint(0, 5)) for i in range(10)] x_str=''.join(x) y=[str(random.randin ...
- C++基础之 成员变量初 始化赋值
摘要: C++成员变量 初始化赋值 你都清楚吗?还有好多坑,好多细节也不知道... 今天在写一个类的时候,由于该类的一个成员变量是引用,所以初始化出现了问题,查了一下之后,才发现,原来引用的初始化和c ...
- 连接APB1和APB2的设备有哪些
在STM32中 APB1(低速外设)上的设备有:电源接口.备份接口.CAN.USB.I2C1.I2C2.UART2.UART3.SPI2.窗口看门狗.Timer2.Timer3.Timer4 . AP ...
- BZOJ3514: Codechef MARCH14 GERALD07加强版【LCT】【主席树】【思维】
Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...
- BZOJ5340: [Ctsc2018]假面【概率+期望】【思维】
LINK 思路 首先考虑减血,直接一个dp做过去,这个部分分不难拿 然后是\(op=1\)的部分 首先因为要知道每个人被打的概率,所以需要算出这个人活着的时候有多少个人活着时概率是什么 那么用\(g_ ...
- CTF-练习平台-Misc之 再来一道隐写
十二.再来一道隐写 下载文件后打开,用常用的几个方法都没有找到有用的信息,然后观察图片发现搞度有点低,所以用WinHex打开把图片高度改大,保存.再次打开图片发现flag
- 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
转载至:https://blog.csdn.net/wo541075754/article/details/75208955 lock-on-active 当在规则上使用ruleflow-group属 ...
- k最邻近算法——使用kNN进行手写识别
上篇文章中提到了使用pillow对手写文字进行预处理,本文介绍如何使用kNN算法对文字进行识别. 基本概念 k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的 ...
- sql 关键字解析
sql 关键字解析 关键字 解析 union 注意:每个 SELECT 语句,必须列的数量.顺序相同,列的数据类型相似.即:1. UNION 内部的每个 SELECT 语句必须拥有相同数量的列:2. ...
- c# 模拟POST上传文件到服务器
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...