当我尝试在 leetcode 中运行这段代码时,它显示以下错误。
我试过用''删除“”它仍然不起作用
string reverseWords(string s) {
s.insert(0," ");
string st="";
string ans="";
for(int i= s.size();i>=0;i--)
{
while(s[i]!=" ")
{
st+=s[i];
}
reverse(st.begin(),st.end());
ans.push_back(st);
st="";
}
return ans;
}
您看到的警告消息与行
while(s[i]!=" ")
.有关
在 C++ 中,
!=
运算符用于比较两个值是否不等。但是,在这种情况下,您将字符 s[i]
与字符串文字 " "
进行比较,这可能会导致意外行为。
要修复此警告,您应该使用单引号来创建字符文字而不是字符串文字。所以,你应该把
while(s[i]!=" ")
行改成while(s[i]!=' ')
。
这里是更正后的代码:
string reverseWords(string s) {
s.insert(0," ");
string st="";
string ans="";
for(int i= s.size();i>=0;i--)
{
while(s[i]!=' ')
{
st+=s[i];
}
reverse(st.begin(),st.end());
ans.push_back(st);
st="";
}
return ans;
}
请注意,此代码在按预期工作之前还有其他问题需要修复。
这是我可能对代码进行的更正:
string reverseWords(string s) {
s.insert(0, " ");
string st = "";
string ans = "";
for (int i = s.size() - 1; i >= 0; i--) {
while (i >= 0 && s[i] != ' ') {
st += s[i];
i--;
}
reverse(st.begin(), st.end());
ans += st[0];
st = "";
}
return ans;
}
s.size() - 1
开始,而不是s.size()
,因为C++数组是零索引的,循环需要遍历字符串中的所有字符。i >= 0
.push_back
字符串的ans
方法应该用单个字符调用,而不是字符串。所以线ans.push_back(st);
应该改为ans += st[0];
.std::string::operator[]
返回 char
对象中的单个 std::string
。您正在将单个 char
与字符串文字(也称为 const char[]
数组)进行比较,这不是有效的操作。您需要将 char
与另一个 char
进行比较。
改变这个:
while(s[i]!=" ")
为此
while(s[i]!=' ')
此外,您正在尝试将
push_back()
std::string
转换为另一个 std::string
,但是 std::string::push_back()
不采用 std::string
,而是采用 char
。
改变这个:
ans.push_back(st);
对此:
ans += st;