Chinaunix首页 | 论坛 | 博客
  • 博客访问: 401590
  • 博文数量: 41
  • 博客积分: 696
  • 博客等级: 上士
  • 技术积分: 727
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-04 20:41
文章分类

全部博文(41)

文章存档

2012年(41)

分类: C/C++

2012-03-15 10:04:27

这道程序题很多的公司的笔试题中都会出现。下面是我自己写的一个程序:

#include

 

int cpystr (char *pss, char *pds)

{

         while((*pds=*pss)!='\0')

         {

                   pds++;

                   pss++;

         }

         return 0;

}

int main()

{

         char *pa="nihao",b[10],*pb;

         pb=b;

         cpystr(pa,pb);

         printf("string a=%s\nstring b=%s\n",pa,pb);

         return 0;

}

Cpystr函数的形参是两个字符指针变量。Pss指向源字符串,pds执行目标字符串。

在上面的代码中,程序完成了两项工作:一是把pss指向的源字符串复制到pds所指向的目标字符串中,二是判断所复制的字符是否为’\0’,若是则表明源字符串结束,不再循环。否则,pdspss都加1,指向下一个字符。在主函数中,以指针变量papb为实参,分别取得确定值后调用cpystr()函数。由于采用的指针变量papsspbpds均指向同一字符串,因此在主函数和cpystr函数中均可使用这些字符串。也可以把coystr函数简化为一下形式:

         int cpystr (char *pss, char *pds)

         {

         While((*pds++ = *pss++)!=’\0’);

         return 0;

         }

即把指针的移动和赋值合并在一个语句中。进一步分析还可以发现’\0’ASCII码为0,对于while语句只看表达式的值为非0就循环,为0则结束循环,因此也可以省去”!=’\0’ ”这个判断部分,而写为一下形式:

         int cpystr (char *pss, char *pds)

         {

                  While(*pds++ = *pss++);

                  return 0;

         }

         表达式的意义可解释为,源字符串向目标字符串赋值,移动指针,若所有赋值为非0则循环,否则结束循环。这样是程序更加的简洁。简化后的源程序就非常的简洁了。

 

 

阅读(6207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~