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’,若是则表明源字符串结束,不再循环。否则,pds和pss都加1,指向下一个字符。在主函数中,以指针变量pa,pb为实参,分别取得确定值后调用cpystr()函数。由于采用的指针变量pa和pss,pb和pds均指向同一字符串,因此在主函数和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则循环,否则结束循环。这样是程序更加的简洁。简化后的源程序就非常的简洁了。