error: expected expression以及no matching function for call to ‘swap’

本文介绍了在解决LeetCode1694题《Reformat PhoneNumber》时遇到的编译错误,主要涉及C++语法问题。错误出现在第18行和23行。第18行原本使用了小括号导致预期表达式错误,修正为使用大括号。第23行的swap函数调用参数错误,修复后正确交换字符串中指定位置的字符。通过这两处修改,成功解决了代码的编译问题。
摘要由CSDN通过智能技术生成

力扣1694. Reformat Phone Number时,编译出错

Line 18: Char 17: error: expected expression
if(k!=0&&k%3==0) ans+=’-’;

原代码如下。

class Solution {
public:
    string reformatNumber(string number) {
        int acnt=0;
        for(int i=0;i<number.size(); ){
            if(number[i]>='0'&&number[i]<='9') i++;
            else{
                number.erase(number.begin()+i);
            }
        }
        if(number.size()<4) return number;
        while(number.size()%3) number+="a";
        string ans;
        int k=0;
        for(int i=0;i<number.size();i++){
            if(number[i]=='a') acnt++;//18行
            else(
                if(k!=0&&k%3==0) ans+='-';
                ans+=number[i];
                k++;
            )
        }
        if(acnt==2) swap(ans[ans.size()-2],ans[ans.size()-3]);//23行
        return ans;
    }
};

看到18行,判断逻辑没有问题啊,一开始还没有看出来,弄回本地IDE时,突然发现,这个地方应该是{ },即大括号,不应该是()小括号。
另外,这个修改之后,又有了新的问题。

Line 23: Char 21: error: no matching function for call to ‘swap’
if(acnt==2) swap(ans.size()-2,ans.size()-3);

提示说是23行出错,不匹配swap函数,一开始,我还以为是swap拼写错了,再一看,发现这是试图交换两个数,本意为交换这两个数组下标中的元素。修改为:

if(acnt==2) swap(ans[ans.size()-2],ans[ans.size()-3]);

就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值