问题 - 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;
}
答案 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])
。