zoukankan      html  css  js  c++  java
  • strspn() 和 strcspn() 函数【转】

    本文转载自:https://flyer103.wordpress.com/2011/06/03/strspn-%E5%92%8C-strcspn-%E5%87%BD%E6%95%B0/

    前几天在看一本关于 Unix 环境编程的书时,在一个程序中有个库函数 strspn(),不知道用法是什么。在 Linux 下通过

    $ man 3 strspn

    查看它的用法。但其中讲的不明白,举了几个例子都与 man 中的解释相反。Google 了很多次才明白用法,具体为:

         #include <string.h>
         size_t strspn(const char *s, const char *accept);
         size_t strcspn(const char *s, const char *reject);
    
         注意两个函数的返回值的位置,都是按 s 的首位置为 0 开始计数的。
         第一个函数的作用是,从 s 第一个字符开始,逐个检查字符与 accept 中
         任意字符是否不相同,若不相同,则返回第一次出现不相同的位置且程序
         正常退出,否则返回的是 s 的长度.
         第二个函数作用是,从 s 第一个字符开始,逐个检查字符与 reject 中任
         意字符是否相同,若相同,则返回第一次出现相同的位置且程序正常退出,
         否则返回的是 s 的长度.
    
    示例:
    /*
     * To understand the useage of strspn()
     */
    
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
            char *str1 = "1234567890";
            char *str2 = "1234567890";
            char *str3 = "gdfa1234af5";
            char *str4 = "ha";
    
            printf("%s in %s is %d
    ", str2, str1, strspn(str1, str2));
            printf("%s in %s is %d
    ", str4, str3, strcspn(str3, str4));
    
            return 0;
    }
    
    结果分别是 10 和 3.

    此次经历,让我对 man page 的正确性有了些怀疑。虽然大部分都是对的,但对于可能影响到以后程序的稳定性和安全性的用法,必须要多举不同的例子来验证。写程序要严谨,要对自己写的每行代码都能预测到该出现的结果。

  • 相关阅读:
    顺序表的扩容
    顺序表的插入
    顺序表的构造
    C# ContentType: "application/json" 请求方式传json
    顺序表构造,插入,扩容操作
    顺序表
    线性表
    算法
    数据结构的分类
    什么是数据结构
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/6402910.html
Copyright © 2011-2022 走看看