Download presentation
Presentation is loading. Please wait.
1
1 生物計算期末作業 暨南大學資訊工程系 2003/05/20
2
2 如何從 C/C++ 讀入參數 int main(int argc, char* argv[]) argc: 參數的個數, argc>0 argv[0]: 目前被執行的檔案名稱,以字串表示 argv[1]: 第一個參數,以字串表示 argv[2]: 第二個參數 … 依此類推
3
3 在老師給各位同學的檔案裡,包含了 (1) *.dat (2) *.cpp (3) *.lex (4) *.seq
4
4 punct.dat punctuation in C/C++ programming language keywords.dat keywords in C/C++ programming language corpus.dat identifiers that you should assume they all have the same meaning in different files 我們以換行( \n )作為分隔符號 同學可以假設在這三個檔案中出現的字串在不同的 C/C++ source code 中意義是相同的。
5
5 *.cpp 包含所有要給同學測試的 C/C++ source code 命名規則: pnnn-v.cpp: nnn: 一組數字 v: 1 是原來的版本, 2 是被老師亂改過後的 nnn 相同則表示檔案來源相同 ACM INTERNATIONAL COLLEGIATE PROGRAMMING CONTEST 的解答 http://acm.uva.es/problemset/
6
6 *.lex 被切割成一堆 tokens 的檔案,其中 comments 已經被移除了。 比如說, p101-2.lex 是 p101-2.cpp 切割好的結 果。
7
7 *.seq *.lex 轉換成數字的序列,數字與數字之間用 /t ( tab )區隔 所有在 *.dat 中出現過的字串編號都相同,以負 數表示,其餘字串以正整數表示
8
8 評分標準 每一位同學至少要能完成 *.seq 之間的比對。 最好是能完成 *.lex 之間的比對。 如果能完成 *.cpp 之間的比對,那就更好。 基本分數: 70 、 80 、 90 完整性:程式至少要能 run 正確性:降低 false positive 與 false negative 效率:不能太暴力去蠻做
9
9 C/C++ 的 comments 移除所有的 comments : /* ……… */ // ……… 要注意 C++ 的 comment 是以 EOL 結尾 // this is a comment C 的 comment 可以換行,但是不可以 nested /* this is a valid comment //*/
10
10 /* this is another * valid comment /* */ // this is a strange comment, /* #include /* but still valid */
11
11 處理字串會遇到的問題 Escape code "say \"hello\"" '\'‘ 與 comment 造成的問題 "3 /*...... */ 4" "3 //4" 空白造成的問題 "const int a=10"
12
12 換行與空白 int a = 1; 與 int a=1; 是相同的。 if (a==1) return 1; void f() { retrun; }
13
13 用有系統的方式去切 tokens 將所有可能的情況先規劃清楚
14
14 o/w: otherwise EOF: end-of-file
15
15 ctype.h isalnum :數字與字母 iscntrl :控制字元 ispunct :標點符號 isalpha :字元 isdigit :十進位數字 isspace :空白(包含 /f /r /n /v /t )
16
16 建立 symbol table unsigned int sum=0; while (*symbol != '\0') sum+=*symbol++; return sum % TABLE_SIZE;
17
17 Separate chaining
18
18 Node* SymbolTable::search(char *symbol) { int posn=hash(symbol); Node *temp; for (temp=table[posn]; temp!=NULL; temp=temp->next) { if (strcmp(symbol, temp->symbol)==0) return temp; } return NULL; }
19
19 Node* SymbolTable::insert(char *symbol) { Node *temp=search(symbol); if (temp!=NULL) // symbol is already in the table return temp; else { int pos=hash(symbol); temp=table[pos]; table[pos]=new Node;// create a new node strcpy(table[pos]->symbol, symbol); table[pos]->sn=++counter;// unique id table[pos]->next=temp; } return temp; }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.