简单程序没有输出和崩溃.我的解决方案有什么问题
No output and crash for simple program.What is wrong with my solution?
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/
相关文章:
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 为什么我不能在同一 MS VS 解决方案中的两个控制台应用中使用C++特征(仅标头库)?
- 此解决方案背后的直觉
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- 在解决方案中的项目中使用时缺少 NuGet 包
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- NULL指针解决方案中的C 分割故障
- C++ VS:多 DLL 解决方案中的'new'和'delete'覆盖
- 在同一解决方案中的项目之间传递 CStrings
- 如何将解决方案中的项目从应用程序更改为静态库
- 使用解决方案上的msbuild来调用某些项目上的自定义目标
- VS2012 如何将 C# 的 AnyCPU 配置的输出目录设置为各自解决方案配置的 x86 和 x64 文件夹?
- 正在将控制台输出重定向到同一解决方案中的MFC屏幕输出
- 为Visual Studio解决方案中的所有项目设置目录结构
- 一个解决方案中的多个项目与cmake和Visual Studio
- 跨 VC 解决方案中的多个项目访问同一对象
- c++11 是否提供与 python maketrans/translate 中实现的解决方案类似的解决方案?
- 我的$Foo ATL解决方案中的($Foo)PS项目用于什么