Commit 11c78e6dbe00757abed06cbba83d8313e957d936
1 parent
62535895
update5 withHash
Showing
4 changed files
with
84 additions
and
41 deletions
Show diff stats
... | ... | @@ -9,33 +9,50 @@ void delete_dico(dico d){ |
9 | 9 | delete_tree(d[i]); |
10 | 10 | } |
11 | 11 | |
12 | -byte end_kind(const string s){ | |
13 | - byte endKind=0; | |
14 | - int i=1; | |
15 | - if(!isalpha(s[0])) | |
16 | - return 0; | |
17 | - if(islower(s[0])){ | |
18 | - endKind=1; | |
19 | - while(islower(s[i])); | |
12 | + | |
13 | + | |
14 | +bool addto_dico(dico d,string s){ | |
15 | + byte endKind=end_kind(s); | |
16 | + if(!is_word(endKind)){ | |
17 | + printf("incorrect word"); | |
18 | + return true; | |
20 | 19 | } |
21 | - else {//if isupper(s[0]) | |
22 | - endKind=2; | |
23 | - if(!isalpha(s[1])){ | |
24 | - | |
25 | - } | |
20 | + if(is_empty(d[hash(s[0])])){ | |
21 | + d[hash(s[0])]=make_node(s[0],0); | |
22 | + addto_tree2(d[hash(s[0])],s+1,endKind); | |
23 | + return false; | |
24 | + } | |
25 | + else { | |
26 | + return addto_tree(d[hash(s[0])],s+1,endKind); | |
26 | 27 | } |
27 | - endKind*=( (s[i]=='\0') + 2* (s[i]=='\''&&s[i+1]=='s'&&s[i+2]=='\0') ); | |
28 | - return endKind; | |
29 | 28 | } |
30 | 29 | |
31 | -bool is_word(const byte endKind){ | |
32 | - return end_Kind!=0; | |
30 | +bool lire(string s,FILE*stream){ | |
31 | + //need to check if stream !=NULL | |
32 | + //ret true if error else false | |
33 | + char* posRet=NULL; | |
34 | + if (fscanf(stream,"%s",s) != NULL){ | |
35 | + posRet=strchr(chaine, '\n'); | |
36 | + if (posRet!= NULL){ | |
37 | + *posRet = '\0'; | |
38 | + } | |
39 | + return false; | |
40 | + } | |
41 | + else | |
42 | + return true; | |
33 | 43 | } |
34 | 44 | |
35 | -bool addto_dico(dico d,string s){ | |
36 | - if(!is_word(end_kind(s))){ | |
37 | - printf("incorrect word"); | |
38 | - return true; | |
45 | +void loadfrom_keyboard(dico d){loadfrom_file(d,stdin);} | |
46 | +void loadfrom_file(dico d,FILE*stream){ | |
47 | + if(stream==NULL){ | |
48 | + printf("sorry, we can't open the file"); | |
49 | + return; | |
39 | 50 | } |
40 | - | |
51 | + string str=calloc(30*sizeof(char)); | |
52 | + while(fscanf(""strstream)!=NULL) | |
53 | +} | |
54 | + | |
55 | +void printto_terminal(dico d){printto_file(dico,stdout);} | |
56 | +void printto_file(dico d,FILE*f){ | |
57 | + ; | |
41 | 58 | } | ... | ... |
... | ... | @@ -9,14 +9,12 @@ void make_empty_dico(dico); |
9 | 9 | void delete_dico(dico); |
10 | 10 | bool addto_dico(dico,string); |
11 | 11 | |
12 | -bool is_word(byte endKind);//pass end_kind() as parameter | |
13 | -byte end_kind(string); | |
14 | 12 | |
15 | 13 | void loadfrom_file(dico,FILE*); |
16 | -void loadfrom_keyboard(dico); | |
14 | +void loadfrom_keyboard(dico);//i.e. loadfrom_file(dico,stdin); | |
17 | 15 | |
18 | 16 | void printto_file(dico,FILE*); |
19 | -void printto_terminal(dico); | |
17 | +void printto_terminal(dico);//i.e. printto_file(dico,stdout); | |
20 | 18 | |
21 | 19 | |
22 | 20 | #endif | ... | ... |
treeh.c
... | ... | @@ -45,17 +45,48 @@ bool is_followed(const tree t){ |
45 | 45 | } |
46 | 46 | |
47 | 47 | //functions is_end |
48 | -bool is_end(const tree t){return t->isEnd & 13;}//0b00010101 | |
49 | -bool ends_with_apostrophe(const tree t){return t->isEnd & 26;}//0b00101010 | |
48 | +bool is_end(const tree t){return t->isEnd & 21;}//0b00010101 | |
49 | +bool ends_with_apostrophe(const tree t){return t->isEnd & 42;}//0b00101010 | |
50 | 50 | |
51 | 51 | bool is_common_end(const tree t){return t->isEnd & 3;}//0b00000011 |
52 | 52 | bool is_proper_end(const tree t){return t->isEnd & 12;}//0b00001100 |
53 | 53 | bool is_acronyme_end(const tree t){return t->isEnd & 48;}//0b00110000 |
54 | 54 | |
55 | -int hash(char c){ | |
56 | - //needs to check c wether isalpha | |
57 | - return c%32-1; | |
55 | + | |
56 | + | |
57 | +//needs to check c wether isalpha | |
58 | +int hash(char c){return c%32-1;} | |
59 | +bool ischar_of_word(char c){return isalpha(c) || c=='\'';} | |
60 | + | |
61 | +byte end_kind(const string s){ | |
62 | + byte endKind=0; | |
63 | + int i=1; | |
64 | + if(!isalpha(s[0])) | |
65 | + return 0; | |
66 | + | |
67 | + if(islower(s[0])){ | |
68 | + endKind=1; | |
69 | + while(islower(s[i])); | |
70 | + } | |
71 | + else {//if isupper(s[0]) | |
72 | + endKind=4; | |
73 | + if(isalpha(s[1])){ | |
74 | + i++; | |
75 | + if(islower(s[1])) | |
76 | + while(islower[i]); | |
77 | + else{//if isupper(s[1]) | |
78 | + while(isupper(s[i])); | |
79 | + endKind=16; | |
80 | + } | |
81 | + } | |
82 | + } | |
83 | + endKind*=( (s[i]=='\0') + 2* (s[i]=='\''&&s[i+1]=='s'&&s[i+2]=='\0') ); | |
84 | + return endKind; | |
58 | 85 | } |
86 | +bool is_word(const byte endKind){ | |
87 | + return end_Kind!=0; | |
88 | +} | |
89 | + | |
59 | 90 | |
60 | 91 | |
61 | 92 | |
... | ... | @@ -64,17 +95,12 @@ bool addto_tree(tree t,const string s,char endKind){ |
64 | 95 | //recursive, need to check all letter in s are alpha or "\'s" |
65 | 96 | //return wether s is already in t or not |
66 | 97 | bool ret; |
67 | - if(s[0]=='\0'){ | |
68 | - ret=is_end(t); | |
98 | + if(s[0]=='\0' || s[0]=='\''){ | |
99 | + ret=t->isEnd & endKind; | |
69 | 100 | t->isEnd=t->isEnd|endKind; |
70 | 101 | return ret; |
71 | 102 | } |
72 | - if(s[0]=='\''){ | |
73 | - ret=ends_with_apostrophe(t); | |
74 | - t->isEnd=t->isEnd|endKind; | |
75 | - return ret; | |
76 | - } | |
77 | - if(t->next[hash(s[0])]==NULL){ | |
103 | + if(is_empty(t->next[hash(s[0])])){ | |
78 | 104 | t->next[hash(s[0])]=make_node(s[0],0); |
79 | 105 | addto_tree2(t->next[hash(s[0])],s+1,endKind); |
80 | 106 | return false; | ... | ... |
treeh.h
... | ... | @@ -33,9 +33,11 @@ bool is_proper_end(const tree);//if true 1st letter is upper |
33 | 33 | bool is_acronyme_end(const tree);//if true all letters are upper |
34 | 34 | |
35 | 35 | int hash(char);//need to check if isalpha |
36 | +bool ischar_of_word(char);//tells if char can be in a word | |
37 | +bool is_word(byte endKind);//pass end_kind() as parameter | |
38 | +byte end_kind(string); | |
36 | 39 | |
37 | -//recursive can only be called in a dico instance | |
38 | -// | |
40 | +//recursive can only be called in a addto_dico | |
39 | 41 | bool addto_tree(tree,const string,byte); |
40 | 42 | void addto_tree2(tree,const string,byte); |
41 | 43 | ... | ... |