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
相关产品推荐
相关产品推荐

