Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <errno.h>
- #define maxsanat 35000
- #define maxpituus 50
- typedef struct
- {
- char s[maxpituus];
- int luku;
- } sana;
- int sanavertailu (sana *q, sana *w) {
- if (q->luku < w->luku) return +1;
- if (q->luku > w->luku) return -1;
- return 0;
- }
- char *strlwr(char *str){ //Muutetaan str pienikirjaimiseksi
- unsigned char *p = (unsigned char *)str;
- while (*p) {
- *p = tolower((unsigned char)*p);
- p++;
- }
- return str;
- }
- const char *siivoa_sana(char *str){ //siivotaan sana, muutetaan isot kirjaimet pieniksi ja poistetaan tiettyjä merkkejä.
- int i=0,j=0;
- char *b = (char *) malloc(sizeof(char) * 256);
- str = strlwr(str); // Muutetaan str pienikirjaimiseksi
- int len = strlen(str);
- int g = 0;
- while(g<len){
- b[g] = str[g];
- g++;
- }
- for(i=0; b[i] != '\0'; ++i){
- while (!((b[i]>='a'&&b[i]<='z') || (b[i]>='A'&&b[i]<='Z') || b[i]=='\0' || b[i] == '`')){
- for(j=i; b[j]!='\0'; ++j){
- b[j]=b[j+1];
- }
- b[j]='\0';
- }
- }
- //0123456789()[]{}\"><%&*^~|-_!?#.:,;\t\r\n
- return b;
- }
- int lisaa_sana(sana *sanat, int n, const char *s, int flag){ //Tarkistetaan onko sana jo taulukossa vai ei
- int p;
- for (p=0; p<n; p++){
- if (strcmp (s, sanat[p].s) == 0){ //vertaillaan taulukon indeksin p sanaa ja käsiteltävää sanaa
- sanat[p].luku++;
- flag = 0;
- return flag;
- }
- }
- return 1;
- }
- int main (){
- FILE *tiedostotxt;
- sana sanat[maxsanat]; //Taulukko structeja
- char s[50];
- char tiedosto[100];
- int n;
- int m;
- int i;
- char *buf0;
- char *a;
- char buf[1000];
- int flag;
- const char p[] = " 0123456789()[]{}\"><%&*^~|-_!?#.:,;\t\r\n";
- flag = 0;
- n = 0;
- m = 100;
- printf("Anna tiedoston polku: ");
- scanf("%s", tiedosto);
- tiedostotxt = fopen(tiedosto,"r");
- while (tiedostotxt == NULL){
- printf("Tiedoston polku ei ole oikein %s\n", strerror(errno));
- printf("\n");
- printf("Anna tiedoston polku: ");
- scanf("%s", tiedosto);
- tiedostotxt = fopen(tiedosto,"r");
- }
- while (1){
- a = fgets(buf,sizeof(buf),tiedostotxt); //Luetaan rivi ja tallennetaan se muuttujaan a
- if (a == NULL){
- break;
- }
- buf0 = buf;
- while (1){
- a = strtok(buf0, p);
- //a = strtok(buf0, " \t\n"); //Rikotaan muuttuja sarjaksi merkkejä (väli toimii erottajana)
- buf0 = NULL; //Strtok muistaa missa ollaan menossa kun buf0 on laitettu NULL
- if (a == NULL){
- break;
- }
- flag = 1;
- char *siivottu_a = siivoa_sana(a); //Käydään siivoamassa sana
- flag = lisaa_sana(sanat, n, siivottu_a, flag); //Tarkistetaan lisaa_sana funktiossa onko sana jo lisätty taulukkoon
- if (flag == 1){ //Jos sanaa ei löytynyt taulukosta lisätään se sinne
- strcpy (sanat[n].s, siivottu_a);
- sanat[n].luku = 1;
- n = n + 1;
- }
- }
- }
- qsort((void *) sanat, n, sizeof (sana),
- (int (*) (const void *, const void *)) sanavertailu);//Järjestellään taulukko luvun mukanaan suuruusjärjestykseen
- if (n < 99){ //Jos sanoja on tekstitiedostossa alle sata printataan koko taulukko järjestyksessä
- for (i=0; i<n; i++){
- printf ("%s\t%d\n", sanat[i].s, sanat[i].luku);
- }
- fclose(tiedostotxt);
- return 0;
- }
- for (i=0; i<m; i++){ //Printataan taulukon ensimmäiset 100 jäsentä
- printf ("%s\t%d\n", sanat[i].s, sanat[i].luku);
- }
- fclose(tiedostotxt);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement