#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main(int argc,char *argv[])
{
/*ifstream testf;
testf.open("D:\\workspace\\conbination_yongbing\\2011_7_20\\10ksample");
if(!testf.good())
{
cout << "fuck" << endl;
exit(0);
}*/
//对命令行下输入参数进行处理
ifstream COMBINATION;
ifstream MATRIX;
ofstream fout;
if(argc != 4)//三个参数,这个值是4,还有一个是程序名称
{
cout << "ERROR: illegal argument number: " << argc << endl;
cout <<
"Input format:\n" <<
"program_name combination_file_path matrix_file_path output_file_path \n" <<
"i.e.\n" <<
"test 10ksample cluster.matrix out.txt" << endl;
exit(0);
}
COMBINATION.open(argv[1]);//参数从1开始,0是名称
MATRIX.open(argv[2]);
fout.open(argv[3]);
if(!COMBINATION.good())
{
cout << "ERROR: illegal combination file path: " << argv[1] <<endl;
cout <<
"Input format:\n" <<
"program_name combination_file_path matrix_file_path output_file_path \n" <<
"i.e.\n" <<
"test 10ksample cluster.matrix out.txt" << endl;
exit(0);
}else if(!MATRIX.good())
{
cout << "ERROR: illegal matrix file path" << endl;
cout <<
"Input format:\n" <<
"program_name combination_file_path matrix_file_path output_file_path \n" <<
"i.e.\n" <<
"test 10ksample cluster.matrix out.txt" << endl;
exit(0);
}else if(!fout.good())
{
cout << "ERROR: illegal output file path" << endl;
cout <<
"Input format:\n" <<
"program_name combination_file_path matrix_file_path output_file_path \n" <<
"i.e.\n" <<
"test 10ksample cluster.matrix out.txt" << endl;
exit(0);
}
cout << "program running..." << endl;
/*ofstream fout("out.txt");
ifstream COMBINATION("10ksample");
ifstream MATRIX("cluster.matrix");
*/
bool m[19999][31];
int matrix_line = 0;
while(MATRIX != NULL)
{
string matr;
getline(MATRIX,matr,'\n');
//cout << matr.length() << endl;
for(int j = 0;j < 30;j++)
{
if(matr[j] == '0')
{
m[matrix_line][j] = false;
}else if(matr[j] == '1')
{
m[matrix_line][j] = true;
}
}
matrix_line++;
}
string comb;
char* num[31];
while(COMBINATION != NULL)
{
int e_num = 0;
int p = 0;
int c = 0;
getline(COMBINATION,comb,'\n');//end reading by '\n'
char* char_comb=const_cast<char*>(comb.c_str());//chonst char* to char*
char* temp_num = strtok(char_comb,"\t");//分割字符串的函数
while(temp_num != NULL)
{
num[e_num] = temp_num;
temp_num = strtok(NULL,"\t");
e_num++;
}
if(e_num == 0)
{
break;
}
for(int i = 0; i < matrix_line; i++)
{
int sum = 0;
for(int j = 0; j < e_num; j++)
{
if(m[i][atoi(num[j])])
{
sum++;
}
}
if(sum > 0)
{
p++;
}
if(sum == e_num)
{
c++;
}
}
fout << p << "\t" << c << endl;
}
COMBINATION.close();
MATRIX.close();
fout.close();
return 0;
}