简单程序没有输出和崩溃。我的解决方案出了什么问题?

时间:2014-01-05 07:25:51

标签: c++ string

问题 - http://community.topcoder.com/stat?c=problem_statement&pm=12863&rd=15710

即使将所需的值分配给正在返回的变量“output”,程序也没有返回所需的值。返回的值可能是垃圾值。我的解决方案出了什么问题?

我的解决方案:

#include<iostream>
#include<vector>

using namespace std;

class ErasingCharacters
{
    public:

        string simulate(string s)
        {
            string output;
            int i,j=0;

            for(i=0;i<s.size()-1;i++) //2 simultaneous same characters are not omitted.
            {
                if(s[i]!=s[i+1])
                {
                    output[j]=s[i];
                    j++;
                }

                else
                i++;            
            }

            int n;

            n=s.size();

            if(s[n-1]!=s[n-2]); //Including the last character(If it is not to be omitted.).
            output[j]=s[n-1];

            return output;
        }
};

int main()
{
    string input,output1;
    ErasingCharacters o;

    cin>>input;

    output1=o.simulate(input);

    cout<<endl<<output1;
}

2 个答案:

答案 0 :(得分:3)

默认构造的std::string的大小为0.如果访问的std::string元素大于或等于std::string的大小,则表示您具有未定义的行为。您应该使用std::string::push_back()来构造结果。

答案 1 :(得分:1)

你实际上没有给你的字符串任何大小。

在不使字符串足够大的情况下为字符串分配字符是未定义的。你现在只是覆盖不属于你的内存,好像你正在访问数组元素越界。

这与PHP之类的语言形成鲜明对比,后者会自动为它们腾出空间。

而不是string[j] = s[i],请使用string.push_back(s[i])