你編譯得到我的程序執行一下就知道了,我絕不會再使用舊式的不安全函數,你要麽裝一套新版的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; }