zoukankan      html  css  js  c++  java
  • c语言字符串操作,及常用函数

    一,字符串操作

    1 . strcpy : 拷贝

    char *stpcpy(char *destin, char *source);

    2 . strcat :  拼接

    char *strcat(char *destin, char *source);

    3 . strchr : 查找第一个字符匹配

    char *strchr(char *str, char c);

    strrchr : 查找最后一个匹配

    char *strrchr(char *str, char c);

    strstr : 查找第一个匹配字符串

    char *strstr(const char *haystack, const char * needle);

    4 . strcmp : 比较

    int strcmp(char *str1, char *str2);

    Asic码,str1>str2,返回值 > 0;两串相等,返回0

     

    strncasecmp : 忽略大小写比较前n个

    int strncasecmp(const char *s1, const char *s2, size_t n);

     

    5 . strdup : 将串拷贝到新建的位置处

    char *strdup(char *str);

    #include <stdio.h>
    #include <string.h>
    #include <alloc.h>
    
    int main(void)
    {
    
        char *dup_str, *string = "abcde";
    
        dup_str = strdup(string);
        printf("%s
    ", dup_str);
        free(dup_str);
    
        return 0;
    
    }

    6 . strtok : 分隔

    char * strtok(char *s, const char *delim);

    char *strtok_r(char *str, const char *delim, char **saveptr);
    strtok_r函数是strtok函数的可重入版本。str为要分解的字符串,delim为分隔符字符串。char **saveptr参数是一个指向char *的指针变量,用来在strtok_r内部保存切分时的上下文,以应对连续调用分解相同源字符串。
     
    int in=0;
    char buffer[INFO_MAX_SZ]="Fred male 25,John male 62,Anna female 16";
    char *p[20];
    char *buf=buffer;
    char *outer_ptr=NULL;
    char *inner_ptr=NULL;
    while((p[in] = strtok_r(buf, ",", &outer_ptr))!=NULL) {   buf=p[in];   while((p[in]=strtok_r(buf, " ", &inner_ptr))!=NULL){     in++;     buf=NULL;    }   buf=NULL; }
    printf("Here we have %d strings/n",in);
    for (int j=0; j<in; j++) {   printf(">%s</n",p[j]); }

     

    7 . swab : 交换字符串n位

    void swab (char *from, char *to, int nbytes);

    二,转换数值类型

    1 . strtod : 从字符串 中转换 double 类型数值,并将后续的字符串指针存储到 end 指向的 char* 类型存储。

    double strtod(const char *nptr, char **endptr);
    float strtof(const char *nptr, char **endptr);


    2 .  atoi(p) 字符串转换到 int 整型 
      atof(p) 字符串转换到 double 符点数 
      atol(p) 字符串转换到 long 整型 

    #include <stdlib.h>

    int atoi(const char *nptr);
    long atol(const char *nptr);

    double atof(const char *nptr);

    三,字符检查 


    int isalpha(int c) 检查是否为字母字符 
    isupper() 检查是否为大写字母字符 
    islower() 检查是否为小写字母字符 
    isdigit() 检查是否为数字 
    isxdigit() 检查是否为十六进制数字表示的有效字符 
    isspace() 检查是否为空格类型字符 
    iscntrl() 检查是否为控制字符 
    ispunct() 检查是否为标点符号 
    isalnum() 检查是否为字母和数字 
    isprint() 检查是否是可打印字符 
    isgraph() 检查是否是图形字符,等效于 isalnum() | ispunct() 

    四,scanf 

    1 . sscanf : 从一个字符串中读进与指定格式相符的数据

    int sscanf(const char *str, const char *format, ...);

    sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 

    2 . sprintf : 把格式化的数据写入某个字符串缓冲区。

    int sprintf( char *buffer, const char *format, [ argument] … );

    五,mem

    1 . memcpy : memcpy中dest和source中的区域不能重叠

    void *memcpy(void *dest, const void *source, size_t count);

    2 . memmove : 如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。

    void *memmove(void *dest, const void *source, size_t count)

    **memcpy和memmove的区别

    http://blog.chinaunix.net/uid-22780578-id-3346391.html

    3 . memcmp :  比较内存区域buf1和buf2的前count个字节。

    int memcmp(const void *s1, const void *s2, size_t n);

    4 . mmap : 

    void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

    int munmap(void* start,size_t length);

    port : 

    PROT_EXEC //页内容可以被执行
    PROT_READ //页内容可以被读取
    PROT_WRITE //页可以被写入
    PROT_NONE //页不可访问

     flags : 

    MAP_FIXED //使用指定的映射起始地址,如果由start和len参数指定的内存区重叠于现存的映射空间,重叠部分将会被丢弃。如果指定的起始地址不可用,操作将会失败。并且起始地址必须落在页的边界上。
    MAP_SHARED //与其它所有映射这个对象的进程共享映射空间。对共享区的写入,相当于输出到文件。直到msync()或者munmap()被调用,文件实际上不会被更新。
    MAP_PRIVATE //建立一个写入时拷贝的私有映射。内存区域的写入不会影响到原文件。这个标志和以上标志是互斥的,只能使用其中一个。
    MAP_DENYWRITE //这个标志被忽略。
    MAP_EXECUTABLE //同上
    MAP_NORESERVE //不要为这个映射保留交换空间。当交换空间被保留,对映射区修改的可能会得到保证。当交换空间不被保留,同时内存不足,对映射区的修改会引起段违例信号。
    MAP_LOCKED //锁定映射区的页面,从而防止页面被交换出内存。
    MAP_GROWSDOWN //用于堆栈,告诉内核VM系统,映射区可以向下扩展。
    MAP_ANONYMOUS //匿名映射,映射区不与任何文件关联。
    MAP_ANON //MAP_ANONYMOUS的别称,不再被使用。
    MAP_FILE //兼容标志,被忽略。
    MAP_32BIT //将映射区放在进程地址空间的低2GB,MAP_FIXED指定时会被忽略。当前这个标志只在x86-64平台上得到支持。
    MAP_POPULATE //为文件映射通过预读的方式准备好页表。随后对映射区的访问不会被页违例阻塞。
    MAP_NONBLOCK //仅和MAP_POPULATE一起使用时才有意义。不执行预读,只为已存在于内存中的页面建立页表入口。
  • 相关阅读:
    端口转发工具ngr0k
    深入理解JavaScript系列(2):揭秘命名函数表达式(转)
    SQL Server DATEDIFF() 函数
    em(倍)与px的区别
    左右页面布局
    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
    《JavaScript高级程序设计》(第二版)
    autocomplete 之 ASP.NET
    JQuery 优缺点略谈
    几个常见CSS错误和解决办法
  • 原文地址:https://www.cnblogs.com/chencesc/p/4282314.html
Copyright © 2011-2022 走看看