【问题标题】:Ideas for counting specific characters in a string计算字符串中特定字符的想法
【发布时间】:2017-11-21 03:26:33
【问题描述】:

我对 SML 很陌生,我正在尝试编写一个函数来确定字符串是否平衡。 平衡弦是: 1. 一个字符串,其中“(”的出现次数等于“)”的次数。 2.在每个前缀中“)”出现的次数不超过“(”。 例如:")(" 不平衡,因为第二个条件不适用。

我编写了这段代码,但出现编译错误:

fun balanceAux(s:string , i:int , c1:int , c2:int) : bool =
    if i = size(s)-1 then
        if c1=c2 then true
            else false
    else
        if c2>c1 then false
        else
            if (str(String.sub(s,i)) = "(") then balanceAux(s,i+1,c1+1,c2)
            else
                if (str(String.sub(s,i)) = ")") then balanceAux(s,i+1,c1,c2+1);
                else balanceAux(s,i+1,c1,c2);

fun balance(t:string) : bool =
balanceAux(t,0,0,0);

我收到 3 个编译错误:

插入 LPAREN

插入 LET

在 EOF 发现

任何想法我做错了什么?我读到它可能与我的代码有关:

如果 A 则 B 否则如果 C 则 D

但我不明白我能做什么。

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    第 10 行末尾有一个杂散的分号。

    从命令式语言转到 SML 可能感觉很奇怪,但 SML 中的分号实际上很少见。在您的示例中,根本不需要分号。

    请注意,如果您将其复制粘贴到 SML/NJ REPL 中,则需要在末尾添加一个分号来告诉 REPL 您已完成输入。然而,这是特定于交互式 SML/NJ 会话的。


    附带说明,与您的编译问题无关:您为平衡字符串给出的定义不是很好。条件 2 意味着如果输入字符串完全包含“)”,那么它是不平衡的——考虑只包含“)”的子字符串;显然,这个子字符串出现的“)”比“(”更多。

    也许您的意思是在每个前缀中,“)”的出现次数不超过“(”?

    【讨论】:

    • 非常感谢! ,我更正了它,甚至可以通过从头开始编写另一个代码来修复它。
    猜你喜欢
    • 2014-01-30
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多