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 (64)
- #define MAX (128)
- typedef struct Contact {
- char name[MAX_NAME];
- char number[MAX_NUM];
- } 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[MAX];
- int k = 0;
- size_t nameSize = MAX_NAME;
- size_t numSize = MAX_NUM;
- FILE* f = fopen("1.txt", "r");
- char nameBuf[MAX_NAME];
- char numBuf[MAX_NUM];
- while (fgets(nameBuf, nameSize, f)
- && fgets(numBuf, numSize, f)){
- strcpy(contacts[k].name, nameBuf);
- strcpy(contacts[k].number, numBuf);
- k++;
- }
- 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);
- }
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement