在C ++中将字符插入字符串时的奇怪行为

时间:2016-12-19 06:50:13

标签: c++ string insert

我试图通过insert方法在C ++中的字符串中插入一个字符,以下是我的代码,但它似乎没有成功。我不知道为什么会发生这种情况的确切原因?

#include <bits/stdc++.h>

using namespace std;

string func1(int n)
{
    string answer;
        bitset<1000> bits(n);
        bool b=false;
        if(ceil((double)log2(n/1.0))>=2)
            b=true;
    for(int i=ceil((double)log2(n/1.0));i>=2;i--)
    {
        b=true;
        if(bits.test(i)==true)
            answer+="2("+func1(i)+")+";
    }
    //answer+=")";
    if(bits.test(1)==true)
            answer+="2";
    if(bits.test(0)==true)
            answer+="2(0)";
    return answer;
}

int main()
{
    string s1=func1(1315);
    string answer;
        cout << s1 << endl;

    for(int i=0;i<s1.length()-4;i++)
    {

       if(s1.substr(i,4)=="2(0)" && s1.at(i-1)!='+')
        s1.insert(i-1,1,'+');
    }
    cout << s1 << endl;

}

1 个答案:

答案 0 :(得分:0)

我不知道你要完成什么,但你的代码有一些逻辑错误。

也许您打算s1.substr(i, 4)代替s1.substr(i, i+4)substr的第二个参数是长度。

即使在执行此操作之后,您也可能会进入无限循环,因为每次插入时字符串的长度都会增加1并从同一索引中重新检查。

这在逻辑上应该比你的代码更正确:

for(int i=0;i<s1.length()-4;i++)
{
   if(i>0 && s1.substr(i,4)=="2(0)" && s1.at(i-1)!='+')
     s1.insert(i-1,1,'+');
   i++;
}