有没有兴趣写几个程序
1. 写一个 memset() 函数,要求能够对连续的内存空间赋值。2. 写一个 strcmp(char *s1,char *s2) 函数,要求能够比较2个字符串。如果2个字符串相同,则返回 0;
若 s1>s2 返回 1;
若 s1<s2 返回-1;
3. 写一个strcpy(char *s1, char *s2) 函数,要求能够将 s2 复制到 s1.
有兴趣的可以写一下,如果觉得编程能力不强,可以帮忙写一下驱动。
大家感兴趣的话,请参与一下。
[ 本帖最后由 seifer1754 于 2007-7-26 19:48 编辑 ] 顶一下,同学们来写写看啊~ 还是肚子老师给面子。
同学们对编程的热情都不高,等明天我把自己写的贴上来吧。 表急
我找十个同学来写~
写完了你再贴~ 我也来了。可是娃8会哦,what a pity~~~ int strcmp ( s1, s2)
unsigned char *s1;
unsigned char *s2;
{
int ret = 0 ;
while( ! (ret = *s1 - *s2) && *s2)
++s1, ++s2;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
else ret=0;
return( ret );
} strcpy(char * s1, const char * s2) {
char * cp = s1;
while( *cp++ = *s2) ;
return(s1 );
} void * memset(void * s,char c,size_t count)
{
char *xs = (char *) s;
while (count--)
*xs++ = c;
return s;
} void* memset(void* s, int c, size_t n)
{
unsigned char* p = (unsigned char*) s;
while (n > 0)
{
*p++ = (unsigned char) c;
--n;
}
return s;
} int strcmp(char *s1,char *s2)
{ int i=0;
while(*(s1+i)==*(s2+i))
if(*(s1+i++)=='\0')
return(0);
while(*(p1+i)-*(p2+i))
{if ((*(p1+i)-*(p2+i))>0)return 1;
else return -1;}
} strcpy(char *s1, char *s2)
{
char *tmp=s1;
while (*s1++=*s2++);
return tmp;
} 开发面试的基础题..不感兴趣 int * memset(char * p,char val,int m_length)
{
if (p==NULL||m_length<0) //判断指针是否初始化
{prinf("ERROR!");
return(0); //赋值失败返回"0"
}
else
while(m_length>0)
*p++=val,m_length--;
return(1); //赋值成功返回"1"
}
int strcmp(char *s1,char *s2) //相当返回 0; s1>s2 返回 1; s1<s2 返回-1;
{while(*s1==*s2&&*s1!='\0'&&*s2!='\0')
s1++,s2++;
if(*s1=='\0'&&*s2=='\0')
return(0);
else if(*s1=='\0')
return(-1);
else if(*s2=='\0')
return(1);
else
{if(*s1>*s2)
return(1);
else
return(-1);
}
}
char * strcpy(char * s1, char * s2)
{ char * temp = s1;
while(*s2!='\0')
*temp++ = *s2++;
return(s1);
}
[ 本帖最后由 NODDY820 于 2007-7-29 17:04 编辑 ] 原帖由 guolm1225 于 2007-7-26 18:01 发表 http://bbs.51testing.com/images/common/back.gif
开发面试的基础题..不感兴趣
…… void还有return的阿 `````````是void指针么。。没用过。。长见识了
不过楼上的char *p1 然后return 的是void型的。。可以这样?
[ 本帖最后由 Jor 于 2007-7-26 20:19 编辑 ] #include <stdio.h>
int str_len(char *s)
{
int count =0;
while(*s != '\0')
{
count++;
s++;
}
return (count);
}
int str_cmp(char *s1, char *s2)
{
if(str_len(s1) != str_len(s2))
{
return (3);
}
else
{
while ( (*s1 != '\0') && (*s2 !=0) )
{
if( *s1 < *s2)
return (-1);
else if ( *s1 > *s2)
return (1);
s1++;
s2++;
}
return (0);
}
}
int str_cpy(char *des, char *src)
{
char *s1;
char *s2;
s1 = des;
s2 = src;
if( str_len(des) >= str_len(src) )
{
while(*s2 != '\0')
{
*s1 = *s2;
s2++;
s1++;
}
return (0);
}
return (-1);
}
void mem_set(int *ptr)
{
int i;
int *my_ptr;
int size_s_t = sizeof(ptr);
my_ptr = (int *)&ptr;
for (i = 0; i < size_s_t/4 ; i++)
{
*(my_ptr + i) = 0x00000000;
}
}
字符串复制
strcpy(char *s1, char *s2){
if(s1!=NULL&&s2!=NULL)
{while(s2!='\0')
*s1++=*S2++;
*(++s1)='\0';
}
esle return erro!
} char *str_cpy(char *des, char *src)
{
char s1;
int i;
i=0;
while(*des!='\0'&&*src!='\0')
{
{
while(*des != '\0')
{
s1= *des;
des++;
i++;
}
while(*src!='\0')
{
s1=*src;
src++;
i++
}
s1='\0';
}
return (s1);
}
请高手点评 上面程序中的des++ 和 src++应该改成 *des++ 和 *src++ 还有 i++后面少了个";" 失误
页:
[1]
2