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

No output and crash for simple program.What is wrong with my solution?

本文关键字:解决方案 我的 什么 问题 崩溃 程序 输出 简单      更新时间:2023-10-16

Problem-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;
}
默认

构造std::string的大小为 0。如果你访问一个std::string的元素,它大于或等于std::string的大小,你就有未定义的行为。您可能应该使用std::string::push_back()来构造结果。

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

在不

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

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

代替string[j] = s[i],使用 string.push_back(s[i])

  • http://www.cplusplus.com/reference/string/string/push_back/
相关文章: