C++ 错误:比较字符串字面量和 std::string 对象
以下是我的提问内容:Line 13: Char 25: warning: result of comparison against a string literal is unspecified (use an explicit string comparison function instead) [-Wstring-compare]
if(s[i] == ')' && symbol.top()=='(' || s[i] == ']' && symbol.top()=='[' || s[i] == '}' && symbol.top()=='{'){
^ ~~~
Line 13: Char 25: error: comparison between pointer and integer ('__gnu_cxx::__alloc_traits<std::allocatorif 条件语句中使用了字符串字面量进行比较而导致的。
在 C++ 中,字符串字面量的类型是 const char*,而不是 std::string。因此,不能直接使用 == 运算符来比较字符串字面量和 std::string 对象。
为了解决这个问题,你可以使用 std::string 的成员函数 compare() 来进行字符串的比较。compare() 函数返回一个整数值,表示两个字符串的相等性。
以下是修改后的示例代码,使用 compare() 函数来比较字符串:
#include <iostream>
#include <stack>
#include <string>
bool isValid(const std::string& s) {
std::stack<char> symbol;
for (size_t i = 0; i < s.length(); ++i) {
if (s[i] == ')' && !symbol.empty() && symbol.top() == '(') {
symbol.pop();
} else if (s[i] == ']' && !symbol.empty() && symbol.top() == '[') {
symbol.pop();
} else if (s[i] == '}' && !symbol.empty() && symbol.top() == '{') {
symbol.pop();
} else {
symbol.push(s[i]);
}
}
return symbol.empty();
}
int main() {
std::string str = "((()))[]{}";
bool valid = isValid(str);
std::cout << "Is the string valid? " << (valid ? "Yes" : "No") << std::endl;
return 0;
}
在这个示例中,我们修改了 isValid() 函数中的条件语句,使用 compare() 函数来进行字符串的比较。通过使用 compare() 函数来比较字符,我们可以解决比较字符串字面量和 std::string 对象时的问题。
希望这个简单的解释和示例代码能帮助你理解并解决这个错误。如果还有任何问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/bQme 著作权归作者所有。请勿转载和采集!