zoukankan      html  css  js  c++  java
  • 字符函数和字符串函数

    1.ctype.h系列字符函数
    ctype.h的字符判断函数
    函数名             为如下参数时,返回值为真
    isalnum()         字母或数字
    isalpha()          字母
    iscntrl()            控制符,如ctrl+B
    isdigit()            阿拉伯数字
    isgraph()         除空格外的所有可打印字符
    islower()          小写字母
    isprint()           可打印字符
    ispunct()         标点符号(除字母空格数字外的可打印字符)
    isspace()         空白字符:空格,换行,走纸,回车,垂直制表符,水平制表符,或是其他实现定义的字符
    isupper()         大写字母
    isxdigit()          十六进制数字字符
     
    ctype.h的字符映射函数
    函数名              动作
    tolower()          如参数是大写字符,返回相应的小写字符;否则,返回原始参数
    toupper()         如参数是小写字符,返回相应的大写字符;否则,返回原始参数
    映射函数不改变原始参数,只返回改变后的值。
     
    2.字符串函数(string.h)
    <1>char *strcpy(char *s1,const char *s2);char *strncpy(char *s1,const char *s2,size-t n);
    //把s2指向的字符串(包括空字符),复制到s1指向的位置,返回值为s1。n表示复制的字数不超过n。作用等价于赋值运算符,并不是简单复制字符串的地址。
    <2>char *strcat(char *s1,const char *s2);char *strncat(char *s1,const char *s2,size-t n);
    //s2指向的字符串被复制到s1指向字符串的结尾
    <3>int strcmp(const char *s1,const char *s2);int strncmp(const char *s1,const char *s2,size-t n);
    //字符串比较,返回值为正数,0和负数,遇见空字符后停止比较。n表示最多比较n个字符
    <4>char *strchr(const char *s,int c);char *strrchr(const char *s,int c);
    //返回指向s中存放字符c的第一个位置的指针,若没有找到则返回null。返回指向s中最后一次出现c的地方的指针
    <5>char *strpbrk(const char *s1,const char *s2);
    //返回指向s1中存放s2中任何字符的第一个位置的地址
    <6>char *strstr(const char *s1,const char *s2);
    //返回指向s1中第一次出现s2字符串的地方的指针
    <7>size-t strlen(const char *s);
    //返回s中字符的个数,不包括标志结束的字符。

    注意:

    <1>strlen()以字符为单位给出字符串的长度。sizeof运算符以字节为单位给出数据的大小。
    <2>strcpy和strcat函数的第一个参数应是字符数组或开辟了存储空间的字符指针;gets(),fgets()的参数也是如此。
    char *str;strcpy(str,"hello world");问题:str没有被初始化,因此这个字符串可能被复制到任何地方!如果str已经被初始化,也不能执行成功;
    给str分配存储空间:str=(char *)malloc(20),能成功执行
    声明一个数组将为数据分配存储空间;而声明一个指针只为一个地址分配存储空间。
    int main (int argc, char **argv)
    {
        char *str1;
        char *str2;
        char str3[20];
    
        str1 = "hello";
        str2 = (char*)malloc(20);
    
        strcpy(str2,"world");
        printf("%s
    ",str2);
        strcpy(str3,"world");   //str2和str3:是将“world”字符复制到它们所指向的内存
        printf("%s
    ",str2);
        strcpy(str1,"world");//在这里出现段错误,str1指向的“hello”不能被修改
    
    
        return 0;
    } /* ----- End of main() ----- */

    运行结果:

    world
    world
    段错误 (core dumped)

     

    3,字符串数组初始化与赋值

    <1>初始化:char a[]="hello word!";  char b[]={'h','l','l','o',...,''};char *c="hello world!";
      数组初始化是从静态存储区把一个字符串复制给数组,而指针初始化是复制字符串的地址。
      数组名a,b是常量(不可被赋值),指针c是变量;两者都可以使用数组符号a[3]和指针加法*(a+3),但只有指针可以使用增量运算符c++
    <2>赋值:strcpy(a,"haha");       c="haha";(只是简单的复制指针)
    <3>字符串数组:char *a[]={"hello world!","hello world!"};a数组存放的是字符串的地址。相当于不规则的二维数组。
    <4>字符数组与字符串的区别在于是不是以''结尾。
  • 相关阅读:
    快速排序(详解)
    14.linux-platform机制实现驱动层分离(详解)
    13.Linux键盘按键驱动 (详解)
    Linux-hexdump命令调试event驱动—详解(13)
    Android开发final的用法
    Android控件RecyclerView的基本用法
    搜索关键词分析——以个人博客网站为例
    java.net.SocketException: Software caused connection abort: socket write error
    Android layout属性大全
    java中 label 配合 break continue 使用方法
  • 原文地址:https://www.cnblogs.com/zhoutian220/p/4000076.html
Copyright © 2011-2022 走看看