输入的单词是不是按字母顺序排列?

Posted

技术标签:

【中文标题】输入的单词是不是按字母顺序排列?【英文标题】:Is the input word in alphabetical order?输入的单词是否按字母顺序排列? 【发布时间】:2020-06-07 16:37:09 【问题描述】:

我正在编写一个函数,该函数将返回 truefalse 关于输入字符串是否按字母顺序排列。我收到了undefined,但不确定我错过了什么

function is_alphabetic(str) 
  let result = true;
  for (let count = 1, other_count = 2; count >= str.length - 1, other_count >= str.length; count++,
    other_count++) 
    if (str.at[count] > str.at[other_count]) 
      let result = false
    
    return result
  

console.log(is_alphabetic('abc'));

【问题讨论】:

你在循环内返回,return 语句应该在循环体之外 【参考方案1】:

你已经把return语句放在for循环里面,它应该在循环体外面。

您的代码也不正确。 count 应该从 0 开始,other_count 应该从 1 开始。

count >= str.length - 1 应该是 count < str.length - 1(这个条件在你的代码中是完全没有必要的,因为 other_count < str.length 应该是循环中的终止条件)

other_count >= str.length 应该是other_count < str.length

这是您更正后的代码

function is_alphabetic(str) 
  let result = true;

  for (let count = 0, other_count = 1; other_count < str.length; count++, other_count++) 
      if (str[count] > str[other_count]) 
         result = false
      
  

  return result;


console.log(is_alphabetic('abc'));

这是另一种方法

function is_alphabetic(str)
   return str.split('')
             .every((c, idx) => str[idx + 1] ? c < str[idx + 1] : true);


console.log(is_alphabetic('abc'));

请记住,如果您希望字符之间的比较不区分大小写,请在比较字符之前将字符串转换为小写。

【讨论】:

【参考方案2】:

我认为如果你使用这个函数比较字符串会更容易:

var sortAlphabets = function(text) 
    return text.split('').sort().join('');
;

这会产生如下结果:

sortAlphabets("abghi")
output: "abghi"

或者:

sortAlphabets("ibvjpqjk")
output: "bijjkpqv"

如果您想知道您的字符串是否按字母顺序排序,您可以使用:

var myString = "abcezxy"
sortAlphabets(myString) == myString
output: false

或者,如果您想创建一个特定的功能:

function isSorted(myString) 
    return sortAlphabets(myString) == myString

对于这种情况,您可以使用:

isSorted("abc")

var sortAlphabets = function(text) 
        return text.split('').sort().join('');
    ;

function isSorted(myString) 
        return sortAlphabets(myString) == myString
    
    
 alert("is abc sorted: " + isSorted("abc"));
  alert("is axb sorted: " + isSorted("axb"));

【讨论】:

【参考方案3】:

应该这样做。我使用了.localeCompare(),因为这将忽略小/大写差异,并且还将合理地处理特定于语言的字符,例如德语变音符号。

function is_alphabetic(str)
  return !str.split('').some((v,i,a)=>i&&v.localeCompare(a[i-1])<0)

['abcdefg','aacccRt','ashhe','xyz','aüv'].forEach(s=> console.log(s,is_alphabetic(s)) );

【讨论】:

【参考方案4】:

您的代码中有两个问题:

    您的 return 语句在您的 for 循环中。为避免此类错误,您可以使用 prettier 之类的代码格式化程序; 您的 for 循环条件无效。请记住,for 循环语句的第二部分应该是 true 进行迭代,false 停止进行迭代。在这种情况下,您的条件count &gt;= str.length-1, other_count &gt;= str.length 将首先评估count &gt;= str.length-1,由于comma operator 而丢弃结果,评估other_count &gt;= str.length 立即解析为false

这两件事一起使你的函数永远不会返回,javascript运行时将其解释为undefined

希望这可以帮助您了解问题所在。但就像许多其他人指出的那样,有更好的方法来解决您要解决的问题。

【讨论】:

【参考方案5】:

您只需要将字符串与其对应的“排序”字符串进行比较

let string = 'abc'.split('').join('');
let sortedString = 'abc'.split('').sort().join('');

console.log(sortedString === sortedString)

let string2 = 'dbc'.split('').join('');
let sortedString2 = 'dbc'.split('').sort().join('');

console.log(string2 === sortedString2)

【讨论】:

以上是关于输入的单词是不是按字母顺序排列?的主要内容,如果未能解决你的问题,请参考以下文章

excel中怎么将英文单词按字母顺序排序?

用单词和数字按字母顺序排列字符串

尝试在c ++中按字母顺序排列单词时出现段错误

按字母顺序排列单词

优化一个简单的缺失词算法[重复]

Java - 检查字符串的 ArrayList 是不是按字母顺序排列