C语言While/For循环代码行数优化(C程序设计,习题7.18笔记)

比如下面的代码,

int i;
for(i=0;form[i]!='\0';i++)
{
    to[i]=form[i];
}
to[i]='\0';

可以简化成下面一行:

for(;(*to++=*form++);); 

又比如While循环:

while(*form!='\0')
{
    *to++=*form++;
}
*to='\0';

也可以简化成一行:

while((*to++=*form++));

多种简化示例:

#include 
int main()
{
    char *a="I am a student.";                  //指针a所指的字符串是常量,不能改变,所以b必须用数组
    char b[]="You are a stydent.";
    char *p=&b;
    printf("string a:%s\nstring b:%s\n",a,b);
    // copy_string(a,p);
    // copy_string_1(a,p);
    // copy_string_2(a,p);
    // copy_string_3(a,p);
    // copy_string_4(a,p);
    // copy_string_5(a,p);
    // copy_string_6(a,p);
    copy_string_7(a,p);
    printf("string a:%s\nstring b:%s\n",a,p);   //输出函数中的字符串,可以用字符数组或指向字符数组的指针代替,数组名就是指针
    return 0;
}
void copy_string(char *form,char to[])          //用数组做参数,形参是地址,形参实参指向的数据是相同的,所以数据可以更改
{
    int i;                          //数组名to是常量,不能进行自增自减操作,所以要定义一个变量做下标
    for(i=0;form[i]!='\0';i++)      //指针型数组,也可用和数组一样的下标的形式form[],但是[]好像没有指针自增自减算的快
    {
        to[i]=form[i];
    }
    to[i]='\0';
}
void copy_string_1(char *form,char *to)
{
    while((*to=*form)!=0)          //用while
    {
        to++;
        form++;
    }
}
void copy_string_2(char *form,char *to)
{
    while((*to++=*form++)!='\0');   //优化代码成一行
}
void copy_string_3(char *form,char *to)
{
    while(*form!='\0')
    {
        *to++=*form++;
    }
    *to='\0';
}
void copy_string_4(char *form,char *to)
{
    while(*form)                    //字符的"\0"的ASSII码=0,所以可以省略"!='\0'"
    {
        *to++=*form++;
    }
    *to='\0';
}
void copy_string_5(char *form,char *to)
{
    while((*to++=*form++));         //综合2和4,把赋值语句放在While语句中,并省略"!='\0'"
}
void copy_string_6(char *form,char *to)
{
    for(;(*to++=*form++)!='\0';);
}
void copy_string_7(char form[],char to[])
{
    char *p1,*p2;                   //若是形参是数组形式的,可以自定义指针,但后就可以对指针自加自减啦
    p1=form;
    p2=to;
    while(*to++=*form++);
}

 

 

 

你可能感兴趣的:(C)