Advertisement
Mazamin

Analisi Del Testo

Jan 17th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX_STR_LEN 256
  5. #define MAX_WORDS 64
  6.  
  7. FILE * my_fopen(char *);
  8. void process_file(FILE *, int [2], char [2][MAX_STR_LEN]);
  9. void process_string(char [MAX_STR_LEN], char [2][MAX_STR_LEN]);
  10.  
  11. int main ()
  12. {
  13.     int pos[2];
  14.     char words[2][MAX_STR_LEN];
  15.     FILE * fp;
  16.     fp = my_fopen("r");
  17.     process_file(fp, pos, words);
  18.     fclose(fp);
  19.     printf("Longest word (%s) is at line %d\nShortest word (%s) is at line %d\n", words[0], pos[0]+1, words[1], pos[1]+1);
  20.     return 0;
  21. }
  22.  
  23. FILE * my_fopen(char * mode)
  24. {
  25.     char nome_file[MAX_STR_LEN];
  26.     FILE * fp;
  27.     printf("Insert file name: ");
  28.     scanf("%s", nome_file);
  29.     if((fp = fopen(nome_file, mode)) == NULL) {
  30.         printf("Unable to open file %s.\n", nome_file);
  31.         exit(EXIT_FAILURE);
  32.     }
  33.     return fp;
  34. }
  35.  
  36. void process_file(FILE * fp, int pos[2], char words[2][MAX_STR_LEN]){
  37.     char str[MAX_STR_LEN], cur_words[2][MAX_STR_LEN];
  38.     int str_num=0;
  39.     while(feof(fp)==0){
  40.         fgets(str, MAX_STR_LEN-1, fp);
  41.         process_string(str, cur_words);
  42.         if((strlen(cur_words[0])>strlen(words[0]))||(str_num==0)){
  43.             pos[0]=str_num;
  44.             strcpy(words[0], cur_words[0]);
  45.         }
  46.         if((strlen(cur_words[1])<strlen(words[1]))||(str_num==0)){
  47.             pos[1]=str_num;
  48.             strcpy(words[1], cur_words[1]);
  49.         }
  50.         str_num++;
  51.     }
  52. }
  53.  
  54. void process_string(char string[MAX_STR_LEN], char words[2][MAX_STR_LEN]){
  55.     int num_words=0, i;
  56.     char * token;
  57.     char del[]=" ,-_!?'“”:.()’;", cur_words[MAX_WORDS][MAX_STR_LEN];
  58.     token=strtok(string, del);
  59.     while(token!=NULL){
  60.         if(strlen(token)>1)
  61.             strcpy(cur_words[num_words++], token);
  62.         token=strtok(NULL, del);
  63.     }
  64.     for(i=0;i<num_words;i++){
  65.         if((strlen(cur_words[i])>strlen(words[0]))||(i==0))
  66.             strcpy(words[0], cur_words[i]);
  67.         if((strlen(cur_words[i])<strlen(words[1]))||(i==0))
  68.             strcpy(words[1], cur_words[i]);
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement