seifer1754 发表于 2007-7-26 10:07:14

有没有兴趣写几个程序

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 编辑 ]

肚子 发表于 2007-7-26 15:38:51

顶一下,同学们来写写看啊~

seifer1754 发表于 2007-7-26 15:43:02

还是肚子老师给面子。

同学们对编程的热情都不高,等明天我把自己写的贴上来吧。

肚子 发表于 2007-7-26 15:43:49

表急

我找十个同学来写~

写完了你再贴~

yufan1997 发表于 2007-7-26 15:48:14

我也来了。可是娃8会哦,what a pity~~~

mojuncong 发表于 2007-7-26 16:00:30

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   );   
                     }

mojuncong 发表于 2007-7-26 16:09:58

strcpy(char * s1, const char * s2) {
                char * cp = s1;
                while( *cp++ = *s2) ;
                return(s1 );
}

mojuncong 发表于 2007-7-26 16:23:05

void   *   memset(void   *   s,char   c,size_t   count)   
   {   
                  char   *xs   =   (char   *)   s;   
      
                  while   (count--)   
                                    *xs++   =   c;   
   
               return   s;   
}

shtina 发表于 2007-7-26 16:36:44

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;
}

shtina 发表于 2007-7-26 17:10:18

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;}

}

shtina 发表于 2007-7-26 17:22:54

strcpy(char *s1, char *s2)
{

char   *tmp=s1;
while   (*s1++=*s2++);   
          return   tmp;   

}

guolm1225 发表于 2007-7-26 18:01:03

开发面试的基础题..不感兴趣

NODDY820 发表于 2007-7-26 18:11:28

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 编辑 ]

肚子 发表于 2007-7-26 18:57:41

原帖由 guolm1225 于 2007-7-26 18:01 发表 http://bbs.51testing.com/images/common/back.gif
开发面试的基础题..不感兴趣

……

Jor 发表于 2007-7-26 20:06:35

void还有return的阿 `````````是void指针么。。没用过。。长见识了
不过楼上的char *p1 然后return 的是void型的。。可以这样?

[ 本帖最后由 Jor 于 2007-7-26 20:19 编辑 ]

seifer1754 发表于 2007-7-27 17:05:31

#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;

    }

}

青龙 发表于 2007-7-27 22:08:41

字符串复制

strcpy(char *s1, char *s2)
{
if(s1!=NULL&&s2!=NULL)
{while(s2!='\0')
*s1++=*S2++;
*(++s1)='\0';
}
esle return erro!
}

ybbiagu 发表于 2007-7-28 19:17:06

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);
}


请高手点评

ybbiagu 发表于 2007-7-28 19:28:07

上面程序中的des++ 和 src++应该改成 *des++ 和 *src++ 还有 i++后面少了个";"

ybbiagu 发表于 2007-7-28 19:28:25

失误
页: [1] 2
查看完整版本: 有没有兴趣写几个程序