2

尝试编写一个返回转换为的调用字符串值的函数小写字母。诀窍是我不能用至本地下层().

以下是我到目前为止的情况。

函数charChange(char){对于(var i=0;i<字符长度;i++){var char2=charCodeAt(char[i])+32;var char3=字符串.fromCharCode(char2);if(char3!==charCodeAt(97-122){警告(“请在函数中仅输入字母”)}}返回字符;}
6
  • 2
    您缺少右括号第5行
    – 伊凡
    评论 2017年8月5日20:38
  • 2
    为什么你不能使用.to下壳体()?
    – 雷杜
    评论 2017年8月5日20:39
  • 我很确定烧焦是JS中的保留字,不允许使用。如果烧焦是一个数组(看起来像),应该是焦炭. 评论 2017年8月5日20:40
  • 1
    阿尔索字符代码位于(97-122)成为字符代码位于(-25),这毫无意义,因为String.prototype.charCodeAt()(1) 必须对字符串调用,并且(2)采用索引,而不是代码点。 评论 2017年8月5日20:45
  • 1
    更重要的是我相信charCodeAt是方法,不是函数!你可能想这么做char[i].charCodeAt(0)而不是charCodeAt(字符[i])
    – 伊凡
    评论 2017年8月5日20:48

5个答案5

重置为默认值

将字符串的大写字母转换为小写字母手动(如果不是手动操作,则只需使用String.prototype.toLowerCase()),您必须:

  1. 编写样板函数:

    函数strLowerCase(str){让newStr=“”;//TODO公司返回newStr;}
  2. 循环原始字符串的每个字符,并获取其代码点:

    函数strLowerCase(str){让newStr=“”;for(设i=0;i<str.length;i++){let code=str.charCodeAt(i);//TODO公司}返回newStr;}
  3. 检查字符是否为大写字母。ASCII格式,个字符,代码点介于6590(含)为大写字母。

    函数strLowerCase(str){让newStr=“”;for(设i=0;i<str.length;i++){let code=str.charCodeAt(i);如果(代码>=65&&代码<=90){//TODO公司}//待办事项}返回newStr;}
  4. 如果字符是大写的,则在其代码点上添加32,使其变为小写(是的,这是ASCII的创建者精心设计的决定)。无论如何,将新字符附加到新字符串。

    函数strLowerCase(str){让newStr=“”;for(设i=0;i<str.length;i++){let code=str.charCodeAt(i);如果(代码>=65&&代码<=90){代码+=32;}newStr+=字符串.fromCharCode(代码);}返回newStr;}
  5. 测试您的新功能:

    strLowerCase(“AAAAAAA BBBBB CCCCC ZZZZzzZZZZ ZZZ aaaaaaaaa&$*(@&(*&##@!)”);//“aaaaaaa bbbbbbb ccccc zzzzzzz aaaaaaaaa&$*(@&(*&*#@!”
2
  • 非常好的解释
    – 伊凡
    评论 2017年8月5日21:04
  • 谢谢你一步一步地解释,这真的帮助我更好地理解。 评论 2017年8月13日18:38
1

字符代码()是对String调用的方法,而不是函数。因此,可以对字符串应用该方法,并将要转换的字符的位置作为参数。也作为乘以零0提到了这个词烧焦是保留的:看看保留字列表.

以下代码修复了该问题:

函数charChange(str){var结果=“”;for(var i=0;i<str.length;i++){var代码=str[i].charCodeAt(0);如果(代码>=65&&代码<=90){var letter=String.fromCharCode(代码+32);结果+=字母//追加修改后的字符}其他{result+=str[i]//追加原始字符}}返回结果;}console.log(charChange('j#aMIE'));

1

这是我目前能想到的两个最优雅的解决方案。查看代码中的注释,如果有任何不清楚的地方,请毫不犹豫地询问。

功能charChange1(str){让结果=“”;常量长度=str.length;//检查输入字符串中的每个字符。。。for(设i=0;i<len;i++){常数c=str[i];const charCode=c.charCodeAt(0);if(charCode<65 | | charCode>90){//如果不是大写字母,//只需将其附加到输出//(还捕获特殊字符和数字)结果+=c;}其他{//否则,首先转换为小写结果+=String.fromCharCode(charCode-65+97);}}返回结果;}功能charChange2(str){//Array.prototype.stice.call(str)转换//将类似(字符串)的数组转换为实际数组//然后,使用与上面相同的逻辑映射每个条目return Array.prototype.slice.call(str).map(函数(c){const charCode=c.charCodeAt(0);如果(charCode<65||charCode>90)返回c;从charCode返回String.fromCharCode(charCode-65+97);})//最后,将数组连接到字符串.join(“”);}控制台.log(charChange1(“AAAAsfasSGSGSG'jlj89345”);控制台.log(charChange2(“AAAAsfasSGSGSG'jlj89345”);


(在侧节点上,当然可以用声明为调用的常量来替换幻数“A”.charCodeAt(0))

(第二个侧节点:不要使用烧焦因为它是JavaScript中的保留字;我更喜欢c(c))

0

你可以使用正则表达式将字符串转换为小写:

:%s/.*/\L&/
0

常数下限案例=()=>{let welcome=提示(“输入字符串”);let lower=“”;for(设i=0;i<welcome.length;i++){code=welcome.charCodeAt(i);如果(代码>=65&&代码<=90){设co=代码+32;控制台.log(co);lower+=字符串.fromCharCode(co);}其他的{lower+=String.fromCharCode(代码);}console.log(下部);}}

1
  • 1
    正如目前所写,你的答案不清楚。拜托编辑添加其他详细信息,帮助其他人了解这是如何解决问题的。你可以找到更多关于如何写出好答案的信息在帮助中心.
    – 社区 机器人程序
    评论 2023年10月14日13:21

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.