• 第十六周项目2-用指针玩字符串


    

    指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)char str[];更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。请编制函数,对字符串的进行各种操作.

           提示1:不少函数中的参数用了const 限定符,如char *astrcat(char str1[], const char str2[])中的str2,其意义在于指定str2数组(或称str2指针指向的值)可以视为常变量,是不可改变的,从而有效的“保护”了数据,免得出现意外的修改;
      提示2:在完成任务时,自编main函数进行测试,测试中,给出的的实际参数可以是以’’结束的字符数组,也可以是指向字符的指针。
      提示3:在实际项目中,通过包括string.h头文件,可以调用C语言中操作字符串的函数完成相关操作,而不必专门定义。另外C++中加入的string类是更强大的支撑。不过,此处的练习,更利于同学们从微观理解,这也是专业人员要体会到的。


    用数组名作形参方案,其核心是实现char *astrcat(char str1[], const char str2[])

    /*
    * Copyright (c) 2014,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:demo.cpp
    * 完成时间:2014年12月8日
    * 版本号:v1.0
    */
    #include <iostream>
    using namespace std;
    char *astrcat(char str1[], const char str2[]);
    int main(){
        char s1[50]="Hello world. ";
        char s2[50]="Good morning. ";
        char s3[50]="vegetable bird! ";
        astrcat(s1,s2);
        cout<<"用数组名作形参:"<<endl;
        cout<<"s1和s2连接后:"<<s1<<endl;
        cout<<"s2和s3连接后:"<<astrcat(s2,s3)<<endl;  //返回值为char*型,可以直接显示
        return 0;
    }
    //本函数采用了形参为数组,在实现中,直接用下标法进行访问
    char *astrcat(char str1[], const char str2[])
    {
        int i,j;
        //以下所有str1[i]可以替换为*(str1+i),str2[j]可以……
        for(i=0; str1[i]!=''; i++); //找到str1的结束
        for(j=0; str2[j]!=''; i++,j++)
        {
            str1[i]=str2[j];
        }
        str1[i]='';//切记!!
        return str1;
    }
    

    运行结果:


    用指针作形参,其核心是实现char *pstrcat(char *str1, const char *str2)函数。

    /*
    * Copyright (c) 2014,烟台大学计算机学院
    * All right reserved.
    * 作者:邵帅
    * 文件:demo.cpp
    * 完成时间:2014年12月8日
    * 版本号:v1.0
    */
    
    #include <iostream>
    using namespace std;
    char *pstrcat(char *str1, const char *str2);
    int main(){
        char s1[50]="Hello world. ";
        char s2[50]="Good morning. ";
        char s3[50]="vegetable bird! ";
        pstrcat(s1,s2);
        cout<<"s1和s2连接后:"<<s1<<endl;
        cout<<"s2和s3连接后:"<<pstrcat(s2,s3)<<endl;
        return 0;
    }
    char *pstrcat(char *str1, const char *str2)
    {
        char *p;
        int i;
        for(p=str1; *p!=''; p++); //找到str1的结束
        for(i=0; *(str2+i)!=''; i++,p++)  //如果q的定义通过,可以用*(q+i)代替*(str2+i)
        {
            *p=*(str2+i);
        }
        *p='';//切记!!
        return str1;
    }
    

    运行结果:


                                                                                                      @ Mayuko

      


  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/mayuko/p/4567596.html
Copyright © 2020-2023  润新知