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

如何简洁实现三字符串全空或全非空校验的If-else逻辑

字符串校验逻辑精简方案

你的业务规则本质是要求三个字符串的空状态完全一致:要么全部为空,要么全部非空;状态不合法时需要明确列出所有为空的字符串。原实现存在两处冗余:外层多余的「是否存在非空字符串」分支判断,以及三段完全重复的空值检查逻辑,可以按以下方式优化。


基础精简版(无嵌套、无重复代码)

去掉多余的外层嵌套,把重复的检查逻辑抽成简单的可调用块,逻辑和原实现100%等价但可读性更高:

#include <iostream>
#include <string>

// 假设string1、string2、string3为已定义的std::string变量
bool invalid = false;

auto check_str = [&](const std::string& s, const char* s_name) {
    if (s.empty()) {
        invalid = true;
        std::cout << s_name << " is empty\n";
    }
};

check_str(string1, "string1");
check_str(string2, "string2");
check_str(string3, "string3");

// 排除三个全空的合法场景,其余存在空字符串的情况均为非法
bool all_empty = string1.empty() && string2.empty() && string3.empty();
if (invalid && !all_empty) {
    return 0;
}

// 校验通过,执行业务逻辑
// do something

可扩展版(适配后续新增校验项的场景)

如果后续可能增加更多需要遵循同规则校验的字符串,可以把待校验项和对应的展示名结构化存储,通过循环完成检查,避免新增重复代码:

#include <iostream>
#include <string>
#include <utility>

// 后续新增校验字符串时,只需要往这个数组里加对应条目即可
std::pair<const std::string&, const char*> check_targets[] = {
    {string1, "string1"},
    {string2, "string2"},
    {string3, "string3"}
};

size_t empty_count = 0;
for (auto& [target, name] : check_targets) {
    if (target.empty()) {
        empty_count++;
        std::cout << name << " is empty\n";
    }
}

// 空字符串数量既不是0(全非空)、也不等于总校验项数(全空)时,判定为非法
if (empty_count != 0 && empty_count != std::size(check_targets)) {
    return 0;
}

// 校验通过,执行业务逻辑
// do something

逻辑覆盖说明

两种实现都完全满足业务要求:

  • 三个字符串全空:无报错,正常进入后续业务流程
  • 三个字符串全非空:无报错,正常进入后续业务流程
  • 存在部分为空的情况:精准打印所有空字符串的名称,直接返回终止流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:27:22