以下是我的提问内容: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::allocator, char>::value_type' (aka 'char') and 'const char *') if(s[i] == ')' && symbol.top()=='(' || s[i] == ']' && symbol.top()=='[' || s[i] == '}' && symbol.top()=='{'){ ~~~~ ^ ~~~ Line 13: Char 47: 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()=='{'){ ^ ~~~这是什么错误内容:这个错误是由于在 if 条件语句中使用了字符串字面量进行比较而导致的。

在 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 对象时的问题。

希望这个简单的解释和示例代码能帮助你理解并解决这个错误。如果还有任何问题,请随时提问。

C++ 错误:比较字符串字面量和 std::string 对象

原文地址: https://www.cveoy.top/t/topic/bQme 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录