以下是我的代码;
int main(){
ifstream infile;
infile.open(fin);
ofstream outfile;
outfile.open(fout);
char c;
int input_order = 0;
string comp_str = "";
vector <string> pfx_str;
srand(time(NULL));
if (infile.fail())
{
cout << "cannot open file!" << endl;
return 0;
}
while (!infile.fail())
{
cout << input_order << endl;
c = infile.get();
if (c == '\n')
{
if (strcmp(comp_str.c_str(), "") != 0)
{
pfx_str.push_back(comp_str);
}
int num = rand() % pfx_str.size();
while (num == 0)
{
num = rand() % pfx_str.size();
}
for (int i = 0; i < num; i++)
{
outfile << "/" << pfx_str.at(i);
}
outfile << "\n";
input_order++;
pfx_str.clear();
}
else if (c == '/')
{
if (comp_str != "")
{
pfx_str.push_back(comp_str);
}
comp_str = "";
}
else
{
comp_str = comp_str + c;
}
}
infile.close();
outfile.close();
return 0;
}
对于由10k输入组成的小组,它可以工作。
但是,对于诸如使用1600k输入的大集合,它打印出00000,并且不起作用。是什么让它发生了?以及如何使其正常工作?
(以前,我使用此代码进行1600k输入,它可以正常工作....)
在编译中,我使用了g++ -std=gnu++0x ....
。
我用谷歌搜索了这个问题,但找不到正确的答案..而且我也无法弄清楚这个问题来自哪个......
谢谢,
+ 此代码用于随机剪切输入。
这是1输入集的示例; (显示输入模式) / AA / AB / BC / AAA / 在这里,我将'aa','ab','bc'和'aaa'视为一个组成部分。 我希望随机剪切此输入作为组件单元。 这是代码的简短步骤; 1.生成随机数(0除外) 2. ex)我使用上面的输入,随机数是2。 然后我切断了这个输入,只剩下'2'组件,这是/ aa / ab / (对输入文本文件中的每个输入重复此过程
=&GT;这个输入; / AA / AB / BC / AAA / (在里面,它产生随机数2) 输出要打印在输出文件中; / AA / AB /
答案 0 :(得分:0)
您的代码没有任何问题。
我更新了你的代码,以便用g ++编译:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main(){
ifstream infile;
infile.open("fin.txt"); // substituted a real file name in here to test
ofstream outfile;
outfile.open("fout.txt"); // ditto here
......其余部分与上面提到的相同。
将其命名为test.cpp,并使用以下命令编译:
g ++ -lm test.cpp -o test.exe
我编写了一个Ruby脚本,根据您在注释中指定的测试集创建输入文件:
#!/usr/bin/env ruby
File.open( 'fin.txt', 'w') do |f|
1600000.times do
f << "/aa/ab/bc/aaa/\n"
end
end
然后我运行了已编译的程序test.exe,并且你完全欠我一杯啤酒,看你的行号是那么高。这是我生命中花费的时间,我永远不会回来。
并通过
获得了预期的fout.txt/aa
/aa/ab
/aa
/aa/ab
/aa/ab/bc
/aa/ab/bc
/aa/ab
/aa/ab/bc
/aa/ab
等
我的猜测是你的系统约束导致系统故障。我在具有大量内存等的典型台式机上运行它。如果您在嵌入式系统上运行它,它可能没有类似的资源。在这一点上,我很想在Raspberry Pi上测试,但我已经在这上面花了太多时间。只要知道您的代码没有任何问题。
将来,请尝试找出您的编码问题。 Stack Overflow是非常宽容的,如果你真的尝试过并且无法弄清楚解决方案,但是你需要展示你尝试过的东西以及结果发生了什么。对于像这样开始的问题,你认为你试图找出算法问题,总是给出数据集和发生的意外结果。
祝你好运!