You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何检查字符串含指定数量双引号或同时存在左右括号

C++ 字符串规则校验实现方法

两类校验均可直接借助C++标准库能力完成,无需引入第三方依赖,具体逻辑如下:

需求1:校验字符串恰好包含2个双引号

规则要求必须存在2个双引号才算合规,核心实现是统计字符串中双引号"的出现次数,最终判断计数结果是否严格等于2。

注意语法细节:你示例中的"是HTML转义显示效果,对应正确的C字符串写法为 std::string main_string = "Hello \"sir\"";——C中字符串字面量的双引号必须用反斜杠转义,不能用单引号包裹字符串内容(单引号是单字符常量语法,直接使用会触发编译错误)。

实现有两种常用写法:

  • 手写遍历统计:无需引入额外头文件,适合极致性能场景
    int quote_cnt = 0;
    for (char c : main_string) {
        if (c == '"') quote_cnt++;
    }
    bool check_pass = (quote_cnt == 2);
    
  • 标准算法统计:代码更简洁,需引入<algorithm>头文件
    #include <algorithm>
    bool check_pass = (std::count(main_string.begin(), main_string.end(), '"') == 2);
    

需求2:校验字符串同时包含左右小括号

规则要求字符串必须同时存在左括号(和右括号),属于符号存在性校验,不需要做括号配对、顺序检查,只要两个符号都至少出现一次即符合要求。
实现直接调用std::string自带的find方法即可,性能优于全量遍历(找到目标字符后会提前终止扫描):

// find方法找不到目标时返回 std::string::npos
bool has_left_paren = (main_string.find('(') != std::string::npos);
bool has_right_paren = (main_string.find(')') != std::string::npos);
bool check_pass = has_left_paren && has_right_paren;

完整可运行测试代码

#include <iostream>
#include <string>
#include <algorithm>

int main() {
    // 双引号校验测试
    std::string str_quote = "Hello \"sir\"";
    int quote_cnt = std::count(str_quote.begin(), str_quote.end(), '"');
    std::cout << "双引号合规用例校验: " << (quote_cnt == 2 ? "通过" : "不通过") << "\n";

    std::string str_quote_bad = "Hello \"sir"; // 仅1个双引号
    int bad_quote_cnt = std::count(str_quote_bad.begin(), str_quote_bad.end(), '"');
    std::cout << "单双引号用例校验: " << (bad_quote_cnt == 2 ? "通过" : "不通过") << "\n";

    // 括号存在性校验测试
    std::string str_paren = "Bruh (moment)";
    bool has_left = (str_paren.find('(') != std::string::npos);
    bool has_right = (str_paren.find(')') != std::string::npos);
    std::cout << "括号合规用例校验: " << (has_left && has_right ? "通过" : "不通过") << "\n";

    std::string str_paren_bad = "Bruh moment)"; // 缺左括号
    bool bad_has_left = (str_paren_bad.find('(') != std::string::npos);
    bool bad_has_right = (str_paren_bad.find(')') != std::string::npos);
    std::cout << "缺左括号用例校验: " << (bad_has_left && bad_has_right ? "通过" : "不通过") << "\n";

    return 0;
}

规则边界调整提示

  • 如果双引号校验规则从“恰好2个”调整为“至少2个”,只需将判断条件从 == 2 改为 >= 2 即可
  • 如果括号校验需要做嵌套配对检查(排除“(a))(b)”这类不合法串),需要额外引入栈结构实现配对逻辑,不属于当前存在性校验的需求范围

内容的提问来源于stack exchange,提问作者ELEMENT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 22:36:04