51Testing软件测试论坛

标题: 有没有兴趣写几个程序 [打印本页]

作者: seifer1754    时间: 2007-7-26 10:07
标题: 有没有兴趣写几个程序
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
顶一下,同学们来写写看啊~
作者: seifer1754    时间: 2007-7-26 15:43
还是肚子老师给面子。

同学们对编程的热情都不高,等明天我把自己写的贴上来吧。
作者: 肚子    时间: 2007-7-26 15:43
表急

我找十个同学来写~

写完了你再贴~
作者: yufan1997    时间: 2007-7-26 15:48
我也来了。可是娃8会哦,what a pity~~~
作者: mojuncong    时间: 2007-7-26 16:00
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
strcpy(char * s1, const char * s2) {
                char * cp = s1;
                while( *cp++ = *s2) ;
                return(s1 );
}
作者: mojuncong    时间: 2007-7-26 16:23
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
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
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
strcpy(char *s1, char *s2)
{

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

}
作者: guolm1225    时间: 2007-7-26 18:01
开发面试的基础题..不感兴趣
作者: NODDY820    时间: 2007-7-26 18:11
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
原帖由 guolm1225 于 2007-7-26 18:01 发表
开发面试的基础题..不感兴趣


……
作者: Jor    时间: 2007-7-26 20:06
void还有return的阿 `````````是void指针么。。没用过。。长见识了
不过楼上的char *p1 然后return 的是void型的。。可以这样?

[ 本帖最后由 Jor 于 2007-7-26 20:19 编辑 ]
作者: seifer1754    时间: 2007-7-27 17:05
#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
标题: 字符串复制
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
char *str_cpy(char *des, char *src)
{
        char s1[100];
        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
上面程序中的des++ 和 src++  应该改成 *des++ 和 *src++ 还有 i++后面少了个";"
作者: ybbiagu    时间: 2007-7-28 19:28
失误
作者: lhjtc8257    时间: 2007-7-31 22:59
学习下




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2