#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct WordCollection
{
size_t NumWords;
char **Words;
};
void splitWord(char *str, struct WordCollection *wc)
{
char *c;
char **currentWord;
c = str;
wc->NumWords = 1;
while (*c != '.')
{
if (*c == ' ')
{
wc->NumWords++;
}
c++;
}
*c = '\0';
wc
->Words
= (char**)malloc(wc
->NumWords
* sizeof(char*));
currentWord = wc->Words;
while (c)
{
*currentWord = c;
currentWord++;
}
}
int myComp(const void *p1, const void *p2)
{
return strcmp(*(const char**)p1
, *(const char**)p2
); }
int main(void)
{
char a[] = { 'w', 'o', 'r', 'n', 'g', ' ', 'w', 'o', 'r', 'd', '.' };
char b[] = { 'c', 'o', 'r', 'r', 'e', 'c', 't', ' ', 'w', 'o', 'r', 'd', '.' };
struct WordCollection a1, b1;
struct WordCollection *pSmaller, *pBigger;
size_t i;
splitWord(a, &a1);
splitWord(b, &b1);
if (a1.NumWords <= b1.NumWords)
{
pSmaller = &a1;
pBigger = &b1;
}
else
{
pSmaller = &b1;
pBigger = &a1;
}
qsort(pBigger
->Words
, pBigger
->NumWords
, sizeof(char*), myComp
);
for (i = 0; i < pSmaller->NumWords; i++)
{
void *res
= bsearch(&pSmaller
->Words
[i
], pBigger
->Words
, pBigger
->NumWords
, sizeof(char*), myComp
); if (res)
{
printf("Found: %s", pSmaller
->Words
[i
]); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IFdvcmRDb2xsZWN0aW9uCnsKCXNpemVfdCBOdW1Xb3JkczsKCWNoYXIgKipXb3JkczsKfTsKCnZvaWQgc3BsaXRXb3JkKGNoYXIgKnN0ciwgc3RydWN0IFdvcmRDb2xsZWN0aW9uICp3YykKewoJY2hhciAqYzsKCWNoYXIgKipjdXJyZW50V29yZDsKCgljID0gc3RyOwoKCXdjLT5OdW1Xb3JkcyA9IDE7CgoJd2hpbGUgKCpjICE9ICcuJykKCXsKCQlpZiAoKmMgPT0gJyAnKQoJCXsKCQkJd2MtPk51bVdvcmRzKys7CgkJfQoKCQljKys7Cgl9CgoJKmMgPSAnXDAnOwoKCXdjLT5Xb3JkcyA9IChjaGFyKiopbWFsbG9jKHdjLT5OdW1Xb3JkcyAqIHNpemVvZihjaGFyKikpOwoKCWMgPSBzdHJ0b2soc3RyLCAiICIpOwoKCWN1cnJlbnRXb3JkID0gd2MtPldvcmRzOwoKCXdoaWxlIChjKQoJewoJCSpjdXJyZW50V29yZCA9IGM7CgkJY3VycmVudFdvcmQrKzsKCgkJYyA9IHN0cnRvayhOVUxMLCAiICIpOwoJfQp9CgppbnQgbXlDb21wKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKewoJcmV0dXJuIHN0cmNtcCgqKGNvbnN0IGNoYXIqKilwMSwgKihjb25zdCBjaGFyKiopcDIpOwp9CgppbnQgbWFpbih2b2lkKQp7CgljaGFyIGFbXSA9IHsgJ3cnLCAnbycsICdyJywgJ24nLCAnZycsICcgJywgJ3cnLCAnbycsICdyJywgJ2QnLCAnLicgfTsKCWNoYXIgYltdID0geyAnYycsICdvJywgJ3InLCAncicsICdlJywgJ2MnLCAndCcsICcgJywgJ3cnLCAnbycsICdyJywgJ2QnLCAnLicgfTsKCglzdHJ1Y3QgV29yZENvbGxlY3Rpb24gYTEsIGIxOwoJc3RydWN0IFdvcmRDb2xsZWN0aW9uICpwU21hbGxlciwgKnBCaWdnZXI7CgoJc2l6ZV90IGk7CgoJc3BsaXRXb3JkKGEsICZhMSk7CglzcGxpdFdvcmQoYiwgJmIxKTsKCglpZiAoYTEuTnVtV29yZHMgPD0gYjEuTnVtV29yZHMpCgl7CgkJcFNtYWxsZXIgPSAmYTE7CgkJcEJpZ2dlciA9ICZiMTsKCX0KCWVsc2UKCXsKCQlwU21hbGxlciA9ICZiMTsKCQlwQmlnZ2VyID0gJmExOwoJfQoKCXFzb3J0KHBCaWdnZXItPldvcmRzLCBwQmlnZ2VyLT5OdW1Xb3Jkcywgc2l6ZW9mKGNoYXIqKSwgbXlDb21wKTsKCglmb3IgKGkgPSAwOyBpIDwgcFNtYWxsZXItPk51bVdvcmRzOyBpKyspCgl7CgkJdm9pZCAqcmVzID0gYnNlYXJjaCgmcFNtYWxsZXItPldvcmRzW2ldLCBwQmlnZ2VyLT5Xb3JkcywgcEJpZ2dlci0+TnVtV29yZHMsIHNpemVvZihjaGFyKiksIG15Q29tcCk7CgkJaWYgKHJlcykKCQl7CgkJCXByaW50ZigiRm91bmQ6ICVzIiwgcFNtYWxsZXItPldvcmRzW2ldKTsKCQl9Cgl9CgoJZnJlZShhMS5Xb3Jkcyk7CglmcmVlKGIxLldvcmRzKTsKCglyZXR1cm4gMDsKfQo=