gpt4 book ai didi

c++ - 如果两个值相同,为什么断言会失败?

转载 作者:太空宇宙 更新时间:2023-11-04 16:08:42 26 4
gpt4 key购买 nike

string removeNonAlphas(string original)
{
for(int i = 0; i < original.size(); ++i){
if(!(original[i] > 64 && original[i] < 91) &&
!(original[i] > 96 && original[i] < 124)){
original[i] = original[i] - original[i];
}
}
return original;
}

//测试1.cpp

string test = "abc abc";
cout << removeNonAlphas(test) << endl; // output = "abcabc"
assert(removeNonAlphas(test) == "abcabc"); // assertion failed

//为什么上面断言会失败? removeNonAlphas 结果(“abcabc”)与//rhs "abcabc"

最佳答案

original[i] = original[i] - original[i];

这样做的目的是用 '\0' 替换字符但不删除它。因此,输出不是 "abcabc",而是 "abc\0abc"'\0' 是不可打印的,因此您不会在输出中看到它,但当您将它与 == 进行比较时它会出现。

不是替换字符串中的字符,而是在迭代旧字符串的同时创建一个新字符串:

string removeNonAlphas(string const& original)
{
std::string result;
for(char c : original)
if((c > 64 && c < 91) ||
(c > 96 && c < 124))
result.push_back(c);
return result;
}

注意:更喜欢使用 std::isalpha 而不是硬编码值。

关于c++ - 如果两个值相同,为什么断言会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com