Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5.  
  6. #define MAX_NAME (128)
  7. #define MAX_NUM (32)
  8. /*
  9. IN :
  10. 1.txt :
  11.         Petar Petrovic
  12.         06554454
  13.         Mika Mikic
  14.         84243234
  15.         Mladen Mladenovic
  16.         12312345
  17.         Mika Mladenovic
  18.         12312314
  19.  
  20.  
  21.     65 (key sa standardnog ulaza u terminalu)
  22.  
  23. OUT:
  24.  
  25.     Petar Petrovic (zato sto mu se 65 poklapa sa brojem)
  26.     Mladen Mladenovic (65 se poklapa sa Ml kod imena Mladen)
  27.     Mika Mladenovic (65 se poklapa sa Ml kod prezimena Mladenovic)
  28.  
  29. */
  30.  
  31.  
  32. typedef struct Contact {
  33.     char* name;
  34.     char* number;
  35. } Contact;
  36.  
  37. char matchTable[10][9] = {
  38.     "0+", "1", "2abcABC", "3defDEF", "4ghiGHI",
  39.     "5jklJKL", "6mnoMNO", "7pqrsPQRS", "8tuvTUV", "9wxyWXY"
  40. };
  41.  
  42.  
  43. bool find(char c, char key){
  44.  
  45.     int j = key - '0';
  46.     for (int i = 0; matchTable[j][i] != '\0'; i++){
  47.         if (c == matchTable[j][i])
  48.             return true;
  49.     }
  50.     return false;
  51.  
  52. }
  53.  
  54. bool matches(char* src, char* key){
  55.  
  56.     int i,j;
  57.  
  58.     for (i = 0; i < strlen(src); i++){
  59.         int tmp = i;
  60.         for (j = 0; j < strlen(key); j++){
  61.             if (find(src[tmp], key[j]))
  62.                 tmp++;
  63.             else
  64.                 break;
  65.         }
  66.         if (j == strlen(key))
  67.             return true;
  68.     }
  69.     return false;
  70. }
  71.  
  72. int main(int argc, char** argv){
  73.  
  74.     char key[MAX_NUM];
  75.     scanf("%s", key);
  76.     size_t arrSize = 32;
  77.  
  78.     Contact* contacts = malloc(arrSize * sizeof(Contact));
  79.  
  80.     int k = 0;
  81.     size_t nameSize = MAX_NAME;
  82.     size_t numSize = MAX_NUM;
  83.     char *nameBuf = malloc(MAX_NAME);
  84.     char *numBuf = malloc(MAX_NUM);
  85.  
  86.     FILE* f = fopen("1.txt", "r");
  87.  
  88.    
  89.     while (fgets(nameBuf, nameSize, f)
  90.             && fgets(numBuf, numSize, f)){
  91.         contacts[k].name = malloc(MAX_NAME);
  92.         contacts[k].number = malloc(MAX_NUM);
  93.         strcpy(contacts[k].name, nameBuf);
  94.         strcpy(contacts[k].number, numBuf);
  95.        
  96.         k++;
  97.         if (k == arrSize);
  98.             arrSize <<= 1;
  99.         contacts = realloc(contacts, arrSize * sizeof(Contact));
  100.     }
  101.  
  102.     for (int i = 0; i < k; i++){
  103.         bool matchesName = matches(contacts[i].name, key);
  104.         bool matchesNumber = matches(contacts[i].number, key);
  105.        
  106.         if (matchesName || matchesNumber)
  107.             printf("%s\n", contacts[i].name);
  108.     }
  109.  
  110.     for (int i = 0; i < k; i++){
  111.         free(contacts[i].name);
  112.         free(contacts[i].number);
  113.     }
  114.     free(contacts);
  115.  
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement