C语言练习2

1.重写strcpy函数

char* my_strcpy(char* strDest,const char* strSrc) {

    char* strTemp = strDest;

    if (strDest == NULL || strSrc == NULL) {

        return NULL;

    }

    while (*strSrc != '\0') {

        *strTemp++ = *strSrc++;

    }

    *strTemp = *strSrc;

    return strTemp;

}

 

Action()

{

         char str1[] = "Hello";

         char str2[] = "qiumengjiao";

 

         //char * str1 = "Hello";//如果这样用char *定义str1,该程序是会报错的,因为此时的"Hello"是存放在常量区的,无法修改到它的值

    //char * str2 = "qiumengjiao";

        

         //char * str2 = (char *)malloc(sizeof(char) * 10);//这样动态获取地址去存放替换后的值也可以,因为定义的指针是存放在堆,可以修改到值

 

         lr_output_message("%s",str2);//校验没有调用函数str2输出原有的值

 

    my_strcpy(str2, str1);

         lr_output_message("%s",str2);//调用my_strcpy函数后,输出str2被str1替换的值“hello”

        

         return 0;

}

结果如下:

 

 

2.重写strcat函数

char* my_strcat(char* strDest,const char* strSrc) {

    if (strDest == NULL || strSrc == NULL) {

        return NULL;

    }//安全检查

    while (*strDest != '\0') {

        strDest++;

    }

    while (*strSrc != '\0') {

        *strDest++ = *strSrc++;

    }

    *strDest = '\0';

    return strDest;

}

Action()

{

         char str1[] = "Hello";

         char str2[] = ",qiumengjiao!";

 

         lr_output_message("未调用函数前字符串为:%s",str1);

    my_strcat(str1, str2);     

 

         lr_output_message("将str2的字符追加到str1后的字符串为:%s",str1);

        

         return 0;

}

结果如下:

 

 

3.请编写一个函数,要求实现如下功能:

         对字符串“jieofAoo)))eEe**7dfUe^^fds^%dfs%”进行处理,统计出非法字符的个数(字母,数字以外的字符都为非法字符)。

Action()

{

    char * str = "jieofAoo)))eEe**7dfUe^^fds^%dfs%";

    int len;

 

    len = strlen(str);

    lr_output_message("字符串个数为:%d",len);

 

    while (*str) {

        if(*str<=57&&*str>=48){

             len--;

            }else if(*str<=90&&*str>=65){

                len--;

            }else if(*str<=122&&*str>=97){

                len--;

            }

        str++;

 

    }

    lr_output_message("字符串的非法字符的个数为:%d",len);

 

    return 0;

}

结果如下:

 

 

4. 通过关联,我们获取到了一个字符串"192,000,123",现在要求去掉字符串中的逗号,并替换成两个%%,即:192%%000%%123请编写一个函数来实现它

char * replace(char *str,char *desc){

 

    while(*str!='\0'){

 

        if(*str == ','){

            *desc++='%';

            *desc++='%';

 

            str++;

        }

 

        *desc++=*str++;

 

    }

    *desc='\0';

 

    return desc;

}

Action()

{

 

    char * str ="192,000,123";

    int len,i;

         char * desc;

 

         len = strlen(str);

         desc = (char *)malloc(2*len*sizeof(char *));

 

    replace(str,desc);

    lr_output_message("转换后的字符串为:%s",desc);

 

    free(desc);

    return 0;

}

结果如下:

 

5. 编写一个函数,查到1至10000内,能被7或者11整除,同时不能被7和11同时整除的数,并放到数组中打印出来

void fun(int *a, int * n)

{

         int * p = a, i;

         *n = 0;

         for(i = 0; i < 100; i++)

         {

                   if((i%7==0||i%11==0)&&!(i % 77 == 0))//判断i被7或11整除,且不能被7和11整除

                   {

                   *(a++) = i;//如果i满足条件,则将i存放到数组a里面;

                   (*n)++;//n是计算i被存入数组的次数

                   }

         }

}

Action()

{

    int str[100], n, k;

 

         fun(str,&n);

 

         for(k=0;k<n;k++)//循环输出数组,n返回的数值就是函数里面的n

         {

                   lr_output_message("%d",str[k]);   //在这里有个疑问,lr_output_message函数是自动换行的,我怎么可以实现与VC++一样的功能呢,一行输出10个,下方是VC++的输出;

        /*

                   if((k+1)%10 ==0)

                   {

                            printf("%5d",aa[k]);

                            printf("\n");

                   }

                   else

                            printf("%5d",aa[k])

                   */

         }

         return 0;

}

结果如下:为了方便截图,只拿了100来试数,但是我如果设置成10000.就会提示:

 

疑问:这是lr这个软件限制的吗?

 

6. 定义一个函数,实现对字符串做如下操作:当字符为字母时,对应的ASCII值加5,当字符为数字时,原样输出,当有其它字符出现时,结束操作,返回已处理的字符串(需要用指针的方式来实现)

 

char *fun(char *str,char *desc){

 

    while (*str != '\0') {//判断字符串是否为空

 

        if((*str<=90&&*str>=65)||*str<=122&&*str>=97)//A~~Z对应的ASCII码是[65,90],a~~z对应的ASCII码是[97,122]

                            {

            *desc=*str+5;//字符为字母的加5赋值给desc

            desc++;

            str++;//继续判断下一个字符

        }else if(*str<=57&&*str>=48)//0~~9对应的ASCII码是[48,57]

                            {

            *desc=*str;

            desc++;

            str++;

                   }else

        {

         *desc='\0';

         break;

        }

    }

 

    return desc;

}

 

Action()

{

 

     char *str = "Hello1234!qiumengjiao";

     char *desc;

 

     int len=strlen(str);

          desc=(char *)malloc(len*sizeof(char *));

     fun(str,desc);

 

          lr_output_message("处理后的字符串为:%s",desc);

 

          free(desc);//释放指针

 

          return 0;

}

结果如下:

 

posted @ 2017-02-23 16:21  沐霖浠  阅读(216)  评论(0)    收藏  举报