ACL_ARGV --- 字符串分割動態數組

  字符串分割是在程序編寫過程當中常常須要作的事情,如,將字符串:hello world, you are welcome!,進行單詞分割,結果但願獲得5個單詞:hello, world, you, are, welcome。使用 ACL_ARGV 函數即可以很是輕鬆地實現此功能,以下:數組

// 分割字符串,分割符爲 ' ', '\t', ',', '!'

ACL_ARGV *argv = acl_argv_split("hello world, you are welcome!", " \t,!");
ACL_ITER iter;  // 遍歷指針

// 遍歷分割後的結果

acl_foreach(iter, argv) {
    // 從遍歷指針中取出字符串型數據
    const char *ptr =  (const char*) iter.data;

    // 打印單詞
    printf(">>>%s\n", ptr);
 }

// 釋放內存
acl_argv_free(argv);

   因而可知使用ACL_ARGV函數分割字符串是如此簡單。此外,由於 ACL_ARGV 結構定義符合 ACL_ITER 規範(參見C語言中迭代器的設計與使用 ),因此能夠直接以 acl_foreach() {} 方式進行遍歷。app

 

  該例子用到了 lib_acl/include/acl_argv.h 中的兩個函數接口,以下:函數

/**
 * 根據源字符串及分隔字符串生成一個字符串動態數組
 * @param str {const char*} 源字符串
 * @param delim {const char*} 分隔字符串
 * @return {ACL_ARGV*}
 */
ACL_API ACL_ARGV *acl_argv_split(const char *str, const char *delim);

/**
 * 釋放字符串動態數組
 * @param argvp {ACL_ARGV*} 字符串動態數組指針
 */
ACL_API ACL_ARGV *acl_argv_free(ACL_ARGV *argvp);
 

  此外,acl_argv.h 中還提供了其它方便使用的函數接口,如:.net

/**
 * 向字符串動態數組中添加一至多個字符串,最後一個NULL字符串表示結束
 * @param argvp {ACL_ARGV*} 字符串動態數組指針
 * @param ... 字符串列表,最後一個爲NULL, 格式如:{s1}, {s2}, ..., NULL
 */
ACL_API void acl_argv_add(ACL_ARGV *argvp,...);

/**
 * 向字符串動態數組中添加字段長度有限制的字符串列表
 * @param argvp {ACL_ARGV*} 字符串動態數組指針
 * @param ... 一組有長度限制的字符串列表,如: {s1}, {len1}, {s2}, {len2}, ... NULL
 */
ACL_API void acl_argv_addn(ACL_ARGV *argvp,...);

/**
 * 根據源字符串及分隔字符串生成一個字符串動態數組, 但限定最大分隔次數
 * @param str {const char*} 源字符串
 * @param delim {const char*} 分隔字符串
 * @param n {size_t} 最大分隔次數
 * @return {ACL_ARGV*}
 */
ACL_API ACL_ARGV *acl_argv_splitn(const char *str, const char *delim, size_t n);

/**
 * 源字符串經分隔符分解後,其結果被附加至一個字符串動態數組
 * @param argvp {ACL_ARGV*} 字符串動態數組指針
 * @param str {const char*} 源字符串
 * @param delim {const char*} 分隔字符串
 * @return {ACL_ARGV*}
 */
ACL_API ACL_ARGV *acl_argv_split_append(ACL_ARGV *argvp, const char *str, const char *delim);
 

  這些函數提供了在對字符串進行分割組合時的操做功能。設計

      ACL 庫下載位置:http://acl.sourceforge.net/指針

相關文章
相關標籤/搜索