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

C++字符串后缀判断代码编译失败与逻辑错误排查求助

编译错误排查

  • main函数中使用string类型时未加std::前缀,你注释掉了using namespace std;,所以必须写全std::string,否则编译器无法识别string类型,这是编译失败的核心原因。
  • 未引入<string>头文件:部分编译器会依赖<iostream>间接引入string,但属于不规范写法,大概率会触发编译报错。
  • 未做长度边界判断:当ending长度大于str、或str为空串且ending非空时,调用str.at(str.length()-1)会触发数组越界异常,直接导致运行崩溃。

逻辑错误排查

你当前的思路完全不符合题目要求,存在两个核心错误:

  1. 错误使用取地址符&:你写的&str.at(xxx) == &ending.at(xxx)是在对比两个字符的内存地址,不是对比字符的值。两个不同字符串的字符存储地址必然不同,哪怕字符值完全相等也会返回false,这就是Codewars返回结果和预期不符的直接原因。
  2. 只对比了末尾单个字符:题目要求判断第一个字符串整个尾部和第二个字符串完全匹配,你只对比最后一个字符逻辑完全错误,例如"abc"和"xc"末尾字符都是c,但显然"abc"不以"xc"结尾。

注释理解错误纠正

  • 函数参数里的&str不是地址,是C++的引用语法,作用是避免字符串拷贝、提升执行效率,搭配const保证函数内部不会修改原字符串。
  • 你对str.length()-1是最后一个字符下标的理解是对的,但加上&之后就变成取最后一个字符的内存地址,和你预期的取字符值逻辑相悖。

可运行的修正代码参考

#include <iostream>
#include <string>

bool solution(std::string const &str, std::string const &ending) {
    // 边界情况1:结尾串为空直接返回true
    if (ending.empty()) {
        return true;
    }
    // 边界情况2:结尾串比原串长,不可能匹配
    if (ending.size() > str.size()) {
        return false;
    }
    // 取原串最后和ending等长的子串,直接对比
    return str.substr(str.size() - ending.size()) == ending;
}

int main() {
    std::string u = "true";
    std::string y = "ue";
    std::cout << std::boolalpha << solution(u, y) << std::endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:01