在 C++11 中使用字符串如何满足条件?

Posted

技术标签:

【中文标题】在 C++11 中使用字符串如何满足条件?【英文标题】:Working with strings in C++11 how to satisfy conditions? 【发布时间】:2020-08-04 18:01:56 【问题描述】:

给定一个字符串,我想检查它是否满足以下条件:

    仅包含小写字母、大写字母、数字、[]; 如果出现[],则必须正确放置它们,换句话说,在每个[之后有],在每个]之前有[

例如,这是合法的:[x1[x3]] 虽然这不是:[x1]]x2[

    如果出现;,它必须出现在[]之间

例如,这是合法的:[;;;][a;bb] 虽然这不是:x1[];y "

我已经完成了 1,但卡在了 2 和 3,有什么帮助吗?

【问题讨论】:

这个[[x3[x1合法吗?它违反了“在每个[之后有] 了解Regex @churill 和 Thomas 感谢您告诉我!我不知道为什么,但由于某种原因,所有示例都被轮换了(现已修复) @FarbodAhmadian 正则表达式在您需要匹配打开和关闭时不是一个好的解决方案。 @FarbodAhmadian:现在您谈论的不是正则表达式,而是某些特定正则表达式库支持的扩展(它们绝不是标准化或可移植的) 【参考方案1】:

只需从左到右一次遍历字符串一个字符(ranged-for 对此很有用),并跟踪嵌套级别(不匹配 [ 的数量)。

规则1:对性格的明显考验

规则 2:如果[ 增加嵌套级别,如果] 减少嵌套级别。如果水平变为负数,那就是错误。如果它在字符串的末尾没有回到零,那就是一个错误。

规则 3:如果 ; 则嵌套级别必须至少为 1,如果(小于或)等于 0 则为错误。

【讨论】:

【参考方案2】:

为了跟踪[],您可以跟踪到目前为止遇到的所有[,但它们没有匹配的]。您还可以检查;是否属于相同的逻辑。

int countBrackets = 0;

for(int i=0;i<strlen(str);i++)

   if(str[i] == '[')
   
      countBrackets++;
   
   else if(str[i] == ']')
   
      if(countBrackets == 0) return false;
      else countBrackets--;
   
   else if(str[i] == ';')
   
      if(countBrackets == 0) return false;
   


if(countBrackets > 0) return false;

【讨论】:

干得好@Jasmeet 最初我认为使用堆栈或队列,但这是一个简单明了的想法【参考方案3】:

这个想法就像@Jasmeet 但在所有条件下就像@BenVoidt 所说:

bool check(string x)
    int bracketSence=0;
    for(int i=0; i < x.size(); ++i)
        //First Condition
        if(islower(x[i]) || isupper(x[i]) || (x[i] >= '0' && x[i]<= '9') ||
           x[i] == '[' || x[i] == ']' || x[i] == ';')
               //Second and Third Condition
               if(x[i] == '[')      ++bracketSence;
               else if(x[i] == ']') --bracketSence;
               else if(x[i] == ';' && bracketSence<1) return false;
               if(bracketSence < 0) return false;
           
        else return false;
    
    return bracketSence == 0;

【讨论】:

您好,请问怎么联系您?有 FB 或 Insta(不是出于本代码的目的) 在chat room 或在某个社交网络@DanielRob 中给我您的用户名

以上是关于在 C++11 中使用字符串如何满足条件?的主要内容,如果未能解决你的问题,请参考以下文章

我如何强加一个必须由集合的*任何两个*成员满足的条件?

如何遍历 2 个文件中的行,比较值并在满足条件时更新文件中的值?

CSV文件操作,PHP如何对满足条件的二维数组进行求和

在批处理文件中,如果满足一个条件而不是周围的 for 循环,如何突破嵌套的 if 语句?

如何返回满足特定条件的会话子集?

python 取满足条件的行 详见问题补充