Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <string.h>
- #define MAX_NAME (128)
- #define MAX_NUM (32)
- /*
- IN :
- 1.txt :
- Petar Petrovic
- 06554454
- Mika Mikic
- 84243234
- Mladen Mladenovic
- 12312345
- Mika Mladenovic
- 12312314
- 65 (key sa standardnog ulaza u terminalu)
- OUT:
- Petar Petrovic (zato sto mu se 65 poklapa sa brojem)
- Mladen Mladenovic (65 se poklapa sa Ml kod imena Mladen)
- Mika Mladenovic (65 se poklapa sa Ml kod prezimena Mladenovic)
- */
- typedef struct Contact {
- char* name;
- char* number;
- } Contact;
- char matchTable[10][9] = {
- "0+", "1", "2abcABC", "3defDEF", "4ghiGHI",
- "5jklJKL", "6mnoMNO", "7pqrsPQRS", "8tuvTUV", "9wxyWXY"
- };
- bool find(char c, char key){
- int j = key - '0';
- for (int i = 0; matchTable[j][i] != '\0'; i++){
- if (c == matchTable[j][i])
- return true;
- }
- return false;
- }
- bool matches(char* src, char* key){
- int i,j;
- for (i = 0; i < strlen(src); i++){
- int tmp = i;
- for (j = 0; j < strlen(key); j++){
- if (find(src[tmp], key[j]))
- tmp++;
- else
- break;
- }
- if (j == strlen(key))
- return true;
- }
- return false;
- }
- int main(int argc, char** argv){
- char key[MAX_NUM];
- scanf("%s", key);
- size_t arrSize = 32;
- Contact* contacts = malloc(arrSize * sizeof(Contact));
- int k = 0;
- size_t nameSize = MAX_NAME;
- size_t numSize = MAX_NUM;
- char *nameBuf = malloc(MAX_NAME);
- char *numBuf = malloc(MAX_NUM);
- FILE* f = fopen("1.txt", "r");
- while (fgets(nameBuf, nameSize, f)
- && fgets(numBuf, numSize, f)){
- contacts[k].name = malloc(MAX_NAME);
- contacts[k].number = malloc(MAX_NUM);
- strcpy(contacts[k].name, nameBuf);
- strcpy(contacts[k].number, numBuf);
- k++;
- if (k == arrSize);
- arrSize <<= 1;
- contacts = realloc(contacts, arrSize * sizeof(Contact));
- }
- for (int i = 0; i < k; i++){
- bool matchesName = matches(contacts[i].name, key);
- bool matchesNumber = matches(contacts[i].number, key);
- if (matchesName || matchesNumber)
- printf("%s\n", contacts[i].name);
- }
- for (int i = 0; i < k; i++){
- free(contacts[i].name);
- free(contacts[i].number);
- }
- free(contacts);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement