|
|
楼主 |
发表于 2013-6-15 23:32:12
|
显示全部楼层
参考答案:
#include <stdio.h>
#include <malloc.h>
#define MAX_LENGHT 256
/*Get the longest chars between source and cp*/
size_t find_longest_length(const char *source, const char *cp)
{
size_t len = 0;
while( *(++source) == *(++cp) )
len++;
return len;
}
/*similar to strcpy*/
char *mystrcpy(char *pfind, const char *cp)
{
int longest = 0;
char *ptmp = pfind;
while( *ptmp++ = *cp++ )
{
longest++;
/*2 is for space to store the first character and '\0'*/
if(longest == MAX_LENGHT -2 )
break;
}
return pfind;
}
char *find_char(const char *source, const char *chars)
{
char *cp;
char *pfind;
pfind = (char *)malloc(MAX_LENGHT);
if( NULL == pfind )
{
fprintf(stderr,"out of memory!\n");
return NULL;
}
if( source != NULL && chars != NULL )
{
for( ; *source != '\0'; source++ )
{
for( cp = chars; *cp!= '\0'; cp++ )
{
if( *source == *cp )
{
mystrcpy(pfind, cp);/*copy string from cp to pfind*/
*(pfind + find_longest_length(source,cp) +1) = '\0';
return pfind;
}
}
}
}
/*Not found char in source*/
if(pfind)
free(pfind);
pfind = NULL;
return NULL;
}
int main(int argc,char *argv[])
{
char *cp;
cp = find_char(argv[1],argv[2]);
if(cp == NULL)
{
printf("Not found chars in source!\n");
return 0;
}
else
{
printf("The longest string is:[%s]\n",cp);
free(cp);
cp = NULL;
}
return 0;
} |
|