`
zsxxsz
  • 浏览: 451112 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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() {} 方式进行遍历。

 

  该例子用到了 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 中还提供了其它方便使用的函数接口,如:

/**
 * 向字符串动态数组中添加一至多个字符串,最后一个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/

0
0
分享到:
评论

相关推荐

    SDL_image-1.2.10.tar.gz_SDL-image lin_SDL_image Lin_SDL_image-1

    int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_EVERYTHING) ) { // 错误处理 return -1; } SDL_Surface* image = IMG_Load("image.png"); if (image == NULL) { // 图像加载失败的错误处理 ...

    Python库 | pyqt5_tools-5.11.2.1.4rc5-cp37-none-win_amd64.whl

    3. **uic**: 这是一个命令行工具,可以将Qt Designer创建的.ui文件转换为Python源代码,使得在运行时可以动态加载UI布局。 4. **rcc**: 资源编译器,用于将图标、图片和其他资源打包进Python模块,以便在程序中方便...

    Python库 | PyQt6_Qt6-6.2.0-py3-none-win_amd64.whl

    5. **图形渲染能力**:Qt6引入了QML(Qt Meta Language),PyQt6也支持,它是一种声明式语言,用于创建富有动态效果和动画的用户界面。 6. **网络编程**:PyQt6包含了对网络编程的支持,可以方便地进行HTTP请求、套...

    ex_argv.rar_in

    `argv`(argument vector)在C语言中是一个特殊的二维字符数组,它由`main()`函数接收。`argv[0]`通常代表执行程序的名称,`argv[1]`到`argv[argc-1]`是用户在命令行上输入的参数,其中`argc`(argument count)表示...

    XXXX.rar_argc argv_c语言 命令 参数 argc_argv_www.xxxx_xxxxerr_yes

    * argv: 字符串数组。 在DOS 3.X 版本中, argv[0] 为程序运行的全路径名 对DOS 3.0 以下的版本, argv[0]为空串("") 。 argv[1] 为在DOS命令行中执行程序名后的第一个字符串 argv[2] 为执行程序名后的第二个...

    vision_opencv-1.12.8.tar.gz

    ros::init(argc, argv, "cv_bridge_example"); ros::NodeHandle nh; image_transport::ImageTransport it(nh); image_transport::Subscriber sub = it.subscribe("camera/image_raw", 1, imageCallback); ros...

    12_argv_example.py

    12_argv_example

    sha-1.rar_ HASH_SHA_hash_hash SHA_sha-256

    用SHA算法实现对任意文件的hash摘要,并且把hash摘要值(至少为160bit)存入另一个文件,形如: hash inputfile hashvaluefile 说明:SHA算法的实现至少为160bit,或者可以... int main(int argc, char *argv[ ])

    程序设计-通过指针引用字符串.pptx

    字符数组是一种静态存储方式,可以直接使用字符数组名作为字符串参数传递给函数。指针变量则可以指向一个字符串常量或字符数组。 例如,下面是一个用字符数组存放字符串的例子: ```c char string[] = "I am a ...

    第9章 指针和数组-5指针数组及其应用 - 用指针数组表示命令行参数1

    `argv`则是一个指针数组,每个元素都是一个字符指针,依次指向每个命令行参数的字符串。值得注意的是,`argv[0]`通常是程序的名称,而`argv[1]`到`argv[argc-1]`则分别对应其他的命令行参数。 以下是一个简单的示例...

    第21章、字符数组和字符指针(理论课).ppt

    - 字符数组是用来存放字符类型的数组,主要用于存储字符串。 - 可以是一维数组,如 `char c_a[10];` 也可以是多维数组,例如 `char c_a[5][5];`。 **初始化**: - 逐个元素赋值,如 `char c_a[14] = {'I', ' ', 'a'...

    图形填充算法_有序边表算法

    void main(int argc,char* argv[]) { char arg[50]={0}; arg[0]= '\"'; strcpy(arg+1,argv[0]); int len=int(strlen(arg)); arg[len]= '\"'; HWND hWnd=FindWindow(NULL,arg); //找到程序运行窗口的句柄 ...

    posix-expand:JavaScript 中类似于 POSIX 的扩展

    _ :参数数组,文件输入; 比如expand one.js two.js three.js fs :使用 node/io 兼容的 fs 覆盖文件系统。 t :制表位的数量。 默认值为 8。 执照 (c) 2015 年凯尔·罗宾逊·杨。 麻省理工学院执照

    VS2008+Ogre+CEGUI

    - 在“OgreTe”的属性页中,对“配置属性”>“常规”下的“字符集”设置为“使用多字节字符集”(Debug模式下)。 - “配置属性”>“调试”下的“工作目录”设置为D:\OgreSDK\OgreSDK_vc9_v1-7-2\bin\debug。 - ...

    Linux_下_Qt_Creator_的安装使用

    int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Qt!"); label->show(); return app.exec(); } ``` 这段代码创建了一个简单的Qt应用程序,显示一个带有...

    argv-set-env:在npm脚本中设置环境变量

    您可能实际上想看一下我的另一个实用程序 。 这可能是您真正要寻找的:-) argv-set-env ... 在build的情况下,会将NODE_ENV设置为字符串'production' ,在test的情况下,它将NODE_ENV设置为字符串'test'

    int _tmain(int argc, _TCHAR argv[]) 函数

    int _tmain(int argc, _TCHAR argv[]) int _tmain(int argc, _TCHAR argv[])

    c语言删除字符串中指定的所有字符

    根据提供的文件信息,本文将详细解释“C语言删除字符串中指定的所有字符”的实现方法与原理。此代码示例提供了一种高效的方法来移除字符串中的特定字符,并且已经在Windows和Linux环境下进行了测试验证。 ### 一、...

    lpc.rar_slice

    为了将一个字符串转换为 argc/argv 形式,我们需要按照空格或特定分隔符将字符串切割,并将结果存储在一个字符数组中。这通常涉及到动态内存分配,因为参数数量在运行时可能未知。 一个简单的实现步骤可能如下: 1...

Global site tag (gtag.js) - Google Analytics