美文网首页
字符串基本操作(C语言)

字符串基本操作(C语言)

作者: 争做卷王一号 | 来源:发表于2018-12-27 01:28 被阅读0次

    字符串之间的复制&连接:

    C语言提供了丰富的内置函数,使得程序更清晰、易维护、分模块方便设计与开发、提高代码的重用性。
    本章主要用来讨论字符串的复制以及连接方式。

    1.1字符串的复制

    C语言中可以使用strcpy函数来实现,其声明如下:char *strcpy(char *p1,const char *p2);虽然这种手段有一些漏洞(可能会溢出),但是如果提前分配好字符串的存储空间那也没什么问题。

    1.1.1代码应用
    #include<stdio.h>
    #include<string.h>
    int main(){
        char str1[]="hello world!";
        char str2[40];
        strcpy(str2,str1);//数组也是一种指针,所以只要数组头即可
        printf("str2:%s\n",str2);
        return 0;
    }
    

    输出结果为:

    str2:hello world!
    
    1.1.2函数实现过程

    这种函数一般用于将一个字符串复制到一个空的字符串数组中char *strcpy(char *p1,const char *p2);的内部实现我们也可以自己写:

    char *strcpy(char *p1,const char *p2)
    {
        char *str = p1;
        while(*p1++=*p2++);
        return str;
    }
    
    1.1.3代码分析

    其实这段代码以前的确一直看不懂,后来不断接触才稍有感悟,本段代码首先通过char *str = p1;将空字符串数组首地址放到新建str里面,而while(*p1++==*p2++);这句代码是真的巧妙,当时我也是看了半天才懂,我一直以为这是一条比值语句,后来才发现这其实是赋值语句,因为*和++运算优先级一样,所以从右到左运算,代码可以改写成while(*(p1++)=*(p2++))其实也就是将p2地址的值挨个复制到p1里面,因为while语句只有里面为真即大于零才执行,等到p2的指针指向'\0'的时候恰好退出while语句,最后,因为p1的地址已经改变,所以第一句代码中的str即为p1原先的首地址,通过return str返回复制后的字符串首地址,因为字符串是连续的,所以指针会一直往下走直到遇到结束符'\0'结束,此时str就是函数执行所需要的结果。

    1.2字符串的选择性复制

    这个函数的实现其实也是基于上一个复制函数的基础上实现的,不过这像一个升级版本的复制,将p2中有限个的数字复制到p1中。函数头如下:char *strncpy(char *p1,const char*p2,size_t num);size_t其实就是无符号整形等价于unsigned int.

    1.2.1代码应用:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char str2[]="jiangxinwei is the most handsome";
        char str1[40];
        strncpy(str1,str2,11);
        str1[11]='\0';
        puts(str1);
        return 0;
    }
    
    1.2.2其运行结果为:
    jiangxinwei 
    

    因为这段代码和上一段代码基本作用差别不大,所以就不再一一分析。

    2.1字符串的连接

    顾名思义,将两个字符串连在一起,也就是将p2字符串连同末尾的null字符串一同复制到p1的末端存储空间之中。通过函数头char *strcat(char *p1,const char *p2);来调用。

    2.1.1代码如下:
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char str[40]="jiang ";
        strcat(str,"su");
        puts(str);
        return 0;
    }
    
    2.1.2运行结果:
    jiang su
    
    2.1.3内置函数实现过程:
    char *strcat( char *p1,const *p2)
    {
        char *p3 = p1;
        while (*p1)
            p1++;
        while(*p1++=*p2++);
            return p3;
    }
    
    2.1.4代码分析:

    其实这段代码还是和之前的复制代码strcpy差不多的,先将目的字符串首地址记录下来,通过while循环使得地址移到字符串的末端存储空间,接着将strcpy过程复制下来即可,相互借鉴即可。

    总结:

    许多编程思想都是很相似的,没有什么是最好的,关键的是编程思维的拓展与提升,只有不断地领悟,才会有所收获。

    编者
    2018年12月

    相关文章

      网友评论

          本文标题:字符串基本操作(C语言)

          本文链接:https://www.haomeiwen.com/subject/pqzvkqtx.html