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

C++检测字符串首尾空格的代码无法识别尾空格,是什么原因?

代码问题根因
  • 核心错误是误用了std::string的end()迭代器:C++ 标准库所有容器的end()方法返回的都是尾后迭代器,指向容器最后一个元素的下一个内存位置,本身不承载任何有效元素,直接对end()解引用属于未定义行为,尾部空格的检测逻辑从根上就没有生效,所以输入尾部带空格的字符串时会误判为合法。
  • 额外隐藏风险:代码没有处理空输入的边界场景,如果用户输入为空字符串,对s.begin()解引用同样属于未定义行为,可能直接导致程序崩溃。
  • 细节隐患:std::isspace的入参要求是值不小于0的字符或者EOF,如果系统中char为有符号类型,传入负字符值会触发未定义行为,调用时需要先强转为unsigned char。

修复后可运行代码
#include <string>
#include <cctype>
#include <iostream>
#include <iterator>

bool is_valid(const std::string& s) {
    // 空字符串的合法性可根据业务需求调整返回值
    if (s.empty()) return false;
    auto start = s.begin();
    // 取最后一个有效字符的迭代器
    auto last = std::prev(s.end());
    return !std::isspace(static_cast<unsigned char>(*start)) 
        && !std::isspace(static_cast<unsigned char>(*last));
}

int main() {
    std::string name{};
    std::getline(std::cin, name);
    if (!is_valid(name)) {
        std::cout << "Invalid!" << std::endl;
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:01