Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include <errno.h>
  5.  
  6. #define maxsanat 35000
  7. #define maxpituus 50
  8.  
  9. typedef struct
  10. {
  11. char s[maxpituus];
  12. int luku;
  13. } sana;
  14.  
  15. int sanavertailu (sana *q, sana *w) {
  16. if (q->luku < w->luku) return +1;
  17. if (q->luku > w->luku) return -1;
  18. return 0;
  19. }
  20.  
  21. char *strlwr(char *str){ //Muutetaan str pienikirjaimiseksi
  22.  
  23. unsigned char *p = (unsigned char *)str;
  24.  
  25. while (*p) {
  26. *p = tolower((unsigned char)*p);
  27. p++;
  28. }
  29.  
  30. return str;
  31. }
  32.  
  33. const char *siivoa_sana(char *str){ //siivotaan sana, muutetaan isot kirjaimet pieniksi ja poistetaan tiettyjä merkkejä.
  34.  
  35. int i=0,j=0;
  36. char *b = (char *) malloc(sizeof(char) * 256);
  37.  
  38. str = strlwr(str); // Muutetaan str pienikirjaimiseksi
  39.  
  40. int len = strlen(str);
  41. int g = 0;
  42. while(g<len){
  43. b[g] = str[g];
  44. g++;
  45. }
  46.  
  47. for(i=0; b[i] != '\0'; ++i){
  48.  
  49. while (!((b[i]>='a'&&b[i]<='z') || (b[i]>='A'&&b[i]<='Z') || b[i]=='\0' || b[i] == '`')){
  50. for(j=i; b[j]!='\0'; ++j){
  51. b[j]=b[j+1];
  52. }
  53. b[j]='\0';
  54. }
  55. }
  56.  
  57. //0123456789()[]{}\"><%&*^~|-_!?#.:,;\t\r\n
  58. return b;
  59.  
  60. }
  61.  
  62. int lisaa_sana(sana *sanat, int n, const char *s, int flag){ //Tarkistetaan onko sana jo taulukossa vai ei
  63. int p;
  64.  
  65. for (p=0; p<n; p++){
  66. if (strcmp (s, sanat[p].s) == 0){ //vertaillaan taulukon indeksin p sanaa ja käsiteltävää sanaa
  67. sanat[p].luku++;
  68. flag = 0;
  69. return flag;
  70. }
  71. }
  72. return 1;
  73. }
  74.  
  75. int main (){
  76.  
  77. FILE *tiedostotxt;
  78. sana sanat[maxsanat]; //Taulukko structeja
  79. char s[50];
  80. char tiedosto[100];
  81. int n;
  82. int m;
  83. int i;
  84. char *buf0;
  85. char *a;
  86. char buf[1000];
  87. int flag;
  88. const char p[] = " 0123456789()[]{}\"><%&*^~|-_!?#.:,;\t\r\n";
  89.  
  90. flag = 0;
  91. n = 0;
  92. m = 100;
  93.  
  94. printf("Anna tiedoston polku: ");
  95. scanf("%s", tiedosto);
  96.  
  97. tiedostotxt = fopen(tiedosto,"r");
  98.  
  99. while (tiedostotxt == NULL){
  100. printf("Tiedoston polku ei ole oikein %s\n", strerror(errno));
  101. printf("\n");
  102. printf("Anna tiedoston polku: ");
  103. scanf("%s", tiedosto);
  104. tiedostotxt = fopen(tiedosto,"r");
  105. }
  106.  
  107. while (1){
  108.  
  109. a = fgets(buf,sizeof(buf),tiedostotxt); //Luetaan rivi ja tallennetaan se muuttujaan a
  110. if (a == NULL){
  111. break;
  112. }
  113. buf0 = buf;
  114.  
  115. while (1){
  116. a = strtok(buf0, p);
  117. //a = strtok(buf0, " \t\n"); //Rikotaan muuttuja sarjaksi merkkejä (väli toimii erottajana)
  118. buf0 = NULL; //Strtok muistaa missa ollaan menossa kun buf0 on laitettu NULL
  119.  
  120. if (a == NULL){
  121. break;
  122. }
  123. flag = 1;
  124. char *siivottu_a = siivoa_sana(a); //Käydään siivoamassa sana
  125. flag = lisaa_sana(sanat, n, siivottu_a, flag); //Tarkistetaan lisaa_sana funktiossa onko sana jo lisätty taulukkoon
  126.  
  127. if (flag == 1){ //Jos sanaa ei löytynyt taulukosta lisätään se sinne
  128. strcpy (sanat[n].s, siivottu_a);
  129. sanat[n].luku = 1;
  130. n = n + 1;
  131. }
  132.  
  133.  
  134. }
  135.  
  136. }
  137.  
  138. qsort((void *) sanat, n, sizeof (sana),
  139. (int (*) (const void *, const void *)) sanavertailu);//Järjestellään taulukko luvun mukanaan suuruusjärjestykseen
  140.  
  141. if (n < 99){ //Jos sanoja on tekstitiedostossa alle sata printataan koko taulukko järjestyksessä
  142. for (i=0; i<n; i++){
  143. printf ("%s\t%d\n", sanat[i].s, sanat[i].luku);
  144. }
  145. fclose(tiedostotxt);
  146. return 0;
  147. }
  148.  
  149.  
  150. for (i=0; i<m; i++){ //Printataan taulukon ensimmäiset 100 jäsentä
  151. printf ("%s\t%d\n", sanat[i].s, sanat[i].luku);
  152. }
  153.  
  154. fclose(tiedostotxt);
  155.  
  156. return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement