Advertisement
Mazamin

String Pattern Occurrences

Jan 19th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.00 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: Sonia
  4.  *
  5.  * Created on 24 gennaio 2018, 12.36
  6.  * PROVA ESAME FONDAMENTI DI PROGRAMMAZIONE
  7.  * Leggere da un file di input 1 stringa pattern e 1 stringa target.
  8.  * Stampare su un file di output il numero di ripetizioni della stringa pattern nella stringa target.
  9.  * ESEMPIO FILE DI INPUT:
  10.  * dog
  11.  * osihadoihasdogiusdgadugdogisudgaisdgdogiusdadogsda
  12.  * ESEMPIO FILE DI OUTPUT:
  13.  * stringa pattern:dog
  14.  * stringa target:osihadoihasdogiusdgadugdogisudgaisdgdogiusdadogsda
  15.  * la stringa pattern è ripetuta 4 volte nella stringa target.
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #define MAX_STR_LEN 256
  22. #define MAX_PAT_LEN 16
  23. #define MAX_FN_LEN 32
  24.  
  25. FILE * my_fopen(char []);
  26. void get_data(FILE *, char[], char[]);
  27. void compute_put_data(FILE *, char[], char[]);
  28.  
  29. main(){
  30.     char string[MAX_STR_LEN], pattern[MAX_PAT_LEN];
  31.     FILE * fp;
  32.     fp=my_fopen("r");
  33.     get_data(fp, string, pattern);
  34.     fclose(fp);
  35.     fp=my_fopen("w");
  36.     compute_put_data(fp, string, pattern);
  37.     fclose(fp);
  38.     return 0;
  39. }
  40.  
  41. FILE * my_fopen(char mode[]){
  42.     FILE * fp;
  43.     char filename[MAX_FN_LEN];
  44.     printf("Insert %s filename: ", (mode[0]=='r')?("input"):("output"));
  45.     fgets(filename, MAX_FN_LEN-1, stdin);
  46.     filename[strlen(filename)-1]='\0';
  47.     if ((fp=fopen(filename, mode))==NULL)
  48.         abort();
  49.     else
  50.         return fp;
  51. }
  52.  
  53. void get_data(FILE * fp, char string[], char pattern[]){
  54.     fgets(pattern, MAX_PAT_LEN-1, fp);
  55.     pattern[strlen(pattern)-2]='\0';
  56.     fgets(string, MAX_STR_LEN-1, fp);
  57. }
  58.  
  59. void compute_put_data(FILE * fp, char string[], char pattern[]){
  60.     int i, j, conta, contb=0;
  61.     char * token;
  62.     for(i=0;i<strlen(string)-strlen(pattern)+1;i++){
  63.         conta=1;
  64.         for(j=0;j<strlen(pattern);j++)
  65.             if(string[i+j]!=pattern[j])
  66.                 conta=0;
  67.         if(conta==1)
  68.             contb++;
  69.     }
  70.     fprintf(fp, "Pattern: %s\nString: %s\nOccurrences: %d", pattern, string, contb);
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement