你編譯得到我的程序執行一下就知道了,我絕不會再使用舊式的不安全函數,你要麽裝一套新版的VC,要麽把我的代碼弄懂了改用舊式的不安全函數,很容易改的。我給你編譯後的exe文件沒用,因爲這需要運行庫,還是得安裝對應版本的VC庫,所以最好你自己編譯。
[ 本帖最后由 TonyDeng 于 2014-4-21 19:13 编辑 ]
[ 本帖最后由 TonyDeng 于 2014-4-21 19:13 编辑 ]

授人以渔,不授人以鱼。
程序代码:
/*
TCATAGTAGGCATTCAACGTTCCATCGATTCCTACGTCAGAAAACTCAGCGCAATCCCAATTCGCACGATTGGTTGCGTAGAATTTTGTCAAACGAGGGGAGGTTGTACCTAATGTGCATGGGTCTGTTATACAATTATTTCAATACTCCTTAATCATACAGATTTGGACGAAAAAGCGCGTACGTCCCCTGGTAACAAGTTTCGGGGTTAACATCACCAGATGCATGAAGTTGTCTGGCAGGGCTAGTATTAACGCCGAACAAACTCGTGTGGCCAGTGGCGTTCGGGGCACAGTTTATAAGAGCGGGGAATTAATAAGACCCTTAAATTCTAGGAGTAAGTGTGACAATCCGATCTATGTCC
这是一段碱基序列,当然实际序列要比它长。序列由A、T、C、G四个字符无序组成,现在要测知每种八联体组合(即8个位置,每个位置可有A、T、C、G中的任一个填充,则8个位置共有4^8个八联体组合)在文件(上面已给出)中的出现次数。
注意:假设这一段基因序列为AGCGTACTAG,则如果以1为间隔这段序列里有3个八联体,即第一个字符至第八个字符,第二个字符至第九个字符,第三个字符至第十个字符。
则如果以2为间隔这段序列里有2个八联体,即第一个字符至第八个字符,第3个字符至第10个字符,
则如果以3为间隔这段序列里有1个八联体,即第一个字符至第八个字符.第4个字符至第11个字符为第2个八联体,但上述字符串只有10个字符。
*/
#include <Windows.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <conio.h>
int get_statistics(FILE* file, const int interval);
const int data_length = 8;
int main(int argc, char* argv[])
{
if (argc < 3)
{
printf_s("命令行格式: %s <文件名> <間隔>\n", strrchr(argv[0], '\\') + 1);
_getch();
return EXIT_FAILURE;
}
const char* filename = argv[1];
int interval = atoi(argv[2]);
if (interval == 0)
{
interval = 1;
}
FILE* file;
errno_t error = fopen_s(&file, filename, "rb");
if (error != 0)
{
printf_s("文件 %s 打開失敗!Error Code = %d\n", filename, GetLastError());
_getch();
return EXIT_FAILURE;
}
printf_s("以 %d 為間隔的八聨體出現次數 = %d\n", interval, get_statistics(file, interval));
fclose(file);
printf_s("Press any key to continue...");
_getch();
return EXIT_SUCCESS;
}
int get_statistics(FILE* file, const int interval)
{
int number = 0;
char* buffer = new char[max(interval, data_length)];
if (fread(buffer, sizeof(char), data_length, file) == data_length)
{
++number;
while (fread(buffer, sizeof(char), interval, file) == interval)
{
++number;
}
}
delete[] buffer;
return number;
}
