我从实践中学习,并喜欢使用在线评委网站来学习。现在我正在开发http://www.z-training.net/tasks.php?show_task=5000000406。一些测试用例通过了测试,但许多测试用例通过了MLE/SEGF。我的代码采用了一种暴力方法。这种方法是MLE/SEGF错误的原因吗?
//z-last char
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "";
string tmp = "";
string newStr = "";
unsigned int strSize = 0;
unsigned int repeat;
unsigned int i;
int cnt = 0;
cin >> str;
cin >> repeat;
tmp = str;
strSize = str.size();
for (i=1;i<repeat;i++)
{
str += tmp;
strSize += strSize;
}
while (strSize > 1)
{
cnt = 0;
newStr = "";
for (i=1;i<strSize;i=i+2)
{
newStr += str[i];
cnt += 1;
}
//cout << newStr << endl;
strSize = cnt;
str = newStr;
}
cout << newStr << endl;
return 0;
}发布于 2011-02-16 01:48:44
我在这里看到了一些问题。在C和C++中,数组的编号从0开始,到分配的长度- 1结束。
str[0]是指str中的第一个字符。
str[str.length() - 1]是指str中的最后一个字符。
此外,C字符串以二进制0结尾。一些C++字符串库将其字符串保存为C库格式,以便可以在其上使用C字符串函数。如果您干扰了字符串末尾的0,并且字符串库正在尝试使用也可能导致seg错误的C字符串库函数。
你可能会得到seg错误,因为你正在读或写超出界限的内存。
https://stackoverflow.com/questions/5007102
复制相似问题