字符串分割是在程序编写过程中经常需要做的事情,如,将字符串: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/
分享到:
相关推荐
// device.cpp : Defines the entry point for the console application. 什么时候不能删除设备 // //#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include "iostream.h" ...
* argv: 字符串数组。 在DOS 3.X 版本中, argv[0] 为程序运行的全路径名 对DOS 3.0 以下的版本, argv[0]为空串("") 。 argv[1] 为在DOS命令行中执行程序名后的第一个字符串 argv[2] 为执行程序名后的第二个...
argv[1]指向参数para_1字符串。 当输入prog para_1 para_2 有2个参数,则由操作系统传来的参数为: argc=3,表示除了程序名外还有2个参数。 argv[0]指向输入的程序路径及名称。 argv[1]指向参数para_1字符串。 argv...
用SHA算法实现对任意文件的hash摘要,并且把hash摘要值(至少为160bit)存入另一个文件,形如: hash inputfile hashvaluefile 说明:SHA算法的实现至少为160bit,或者可以... int main(int argc, char *argv[ ])
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); //找到程序运行窗口的句柄 ...
int _tmain(int argc, _TCHAR argv[]) int _tmain(int argc, _TCHAR argv[])
您可能实际上想看一下我的另一个实用程序 。 这可能是您真正要寻找的:-) argv-set-env ... 在build的情况下,会将NODE_ENV设置为字符串'production' ,在test的情况下,它将NODE_ENV设置为字符串'test'
Index of current file in argv.Number of arguments in argv.
$ npm install argv-to-object 用法 var argv = require ( 'argv-to-object' ) ; argv(map [,options]) 将命令行参数映射到配置object 。 var map = { 'env' : { 'keypath' : 'argv' , 'type' : 'string' ...
argv-cmd-lib是一个函数库,可帮助您编写支持多个命令的命令行应用程序。 安装 npm i argv-cmd-lib 导出的API 注意:阅读,以逐步了解如何使用API解析cli应用程序的命令。 /** * Describes a command ...
ubuntu@laptop:/tmp/build$ cmake -DCMAKE_INSTALL_PREFIX=/tmp/install ~/empty-argv-segfault-check/ && make && make install -- The CXX compiler identification is GNU 7.2.0 -- Check for working CXX ...
转自github 优化学习python ...req=urllib2.Request(sys.argv[1]) fd=urllib2.urlopen(req) print "Retrieved",fd.geturl() info=fd.info() for key,value in info.items(): print "%s = %s " % ( key,value)
int main(int argv, char *argc[]){ wifi_connect_ap.cpp的main函数嵌可以看见第一个参数为SSID,第二参数为密码,中间用空格隔开即可。 WIFI连接之前: root@TinaLinux:/# ifconfig lo Link encap:Local ...
npm install cross-argv基本上使带有单引号字符串的参数在任何地方都可以工作到node app.js 'foo bar' ,否则在cmd.exe使用时可能会引起问题。用法const xargv = require ( 'cross-argv' )console . log ( xargs ( ...
全志R40平台的tinav2.1系统下打开SPI2接口 1、(可选修改) Q:\r40_tinav2.1\spi20_r40_tinav2.1\lichee\brandy\build.sh build_uboot() { if [ "x${PLATFORM}" = "xsun50iw1p1" ] || \ [ "x${PLATFORM}" = "xsun...
通过/dev/i2c-n节点,用户可以在userspace直接访问板上的i2c外设寄存器,主要是透过I2C_RDWR这个IO控制命令将i2c_msg数组传递给kernel去执行。 开发板的/dev/i2c-1总线下挂有一片I2C的RTC:pcf8563。 root@android...
将对象转换为参数数组以传递给cli进程 注意: object-to-argv仅在iojs和节点v4 +上受支持。 要与旧版本的节点一起使用,请使用object-to-argv@1 。 安装 $ npm install object-to-argv 测试 $ npm test 原料药 ...
C 字符串以空字符结尾; 避免注入操作码中的空字节 编码文件 ./Encode.sh ObjFile 将 objfile 的指令助记符转储为十六进制操作码序列 空文件 ./Nulls.sh ObjFile 在 objfile 的指令操作码中搜索空字节并显示有问题...
==strcpy拷贝的结束标志是查找字符串中的\0 因此如果字符串中没有遇到\0的话 会一直复制,直到遇到\0,上面的123都因此产生越界的情况 建议使用 strncpy 和 memcpy ---------------------------------------------...
C/C++ 动态数组的创建的实例详解 在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例: #include #include #include using namespace std; int main(int argc,char **argv) { ///*int...