`
cwqcwk1
  • 浏览: 87299 次
文章分类
社区版块
存档分类
最新评论

C/C++ 分割字符串的多种方式

 
阅读更多

strtok函数

在C/C++中, strtok函数被用来拆分字符串

strtok函数原型:

char *strtok( char *str, const char *delims );

strtok函数例子:

char str[] = "now#the tiger is coming#please run away";
char delims[] = "#";
char *result = NULL;

result = strtok( str, delims );

while( result != NULL )
{
	printf( "result is \"%s\"\n", result );
	result = strtok( NULL, delims );
}
但是如何二次拆分字符串,比如说分解GET参数?这时候就需要使用strtok的线程安全版本strtok_s(linux下为strtok_r)。

strtok_s函数

strtok_s函数原型:

char *strtok( char *str, const char *delims, char **context );

怎么理解strtok_s和strtok的关系?我不擅长语言描述,还是直接贴代码:

char *strtok(char *str, const char *delims)
{
    static char *strtokstate;
    return strtok_s(str, delims, &strtokstate);
}

利用 strtok_s 二次拆分字符串例子,分解GET参数:

char data[] = "name=vicky&sex=male&age=18";
char *buf = data;
char *result = NULL;
char *strtokstate = NULL;
char *strtokstate2 = NULL;

while((result = strtok_s(buf, "&", &strtokstate)) != NULL)
{
	buf = result;
	while((result = strtok_s(buf, "=", &strtokstate2))!= NULL)
	{
		printf("%s ", result);
		buf = NULL;
	}
	printf("\n");
	buf = NULL;
}

strstr函数

在C/C++中,还有一个函数可以用来分割字符串:strstr

strstr的原型:

char *strstr( const char *str, const char *delims );
strstr函数返回一个指针,它指向字符串delims 首次出现于字符串str中的位置,如果没有找到,返回NULL。
strstr函数例子:

char str[] = "now#the tiger is coming#please run away#"; 
char delims[] = "#"; 
char* buf = str;
char* result = NULL;

while( (result = strstr(buf, delims)) != NULL ) 
{
	result[0] = '\0';
	printf( "result is \"%s\"\n", buf );
	buf = result + strlen(delims); 
}
那么同样的问题来了,strtok和strstr的区别是什么的?

还是继续贴代码说明吧

strtok函数还可以这样拆分字符串

char str[] = "now#the tiger is coming,please run away";
char delims[] = ",#";
char *result = NULL;

result = strtok( str, delims );

while( result != NULL )
{
	printf( "result is \"%s\"\n", result );
	result = strtok( NULL, delims );
}
注意到了吗,delims改成了“,#”,也就是说strtok函数可以同时匹配多种字符,而strstr函数一般在用字符串作分隔符的情况下使用。

分享到:
评论

相关推荐

    sscanf练习详解-分割字符串

    本篇文章将深入讲解如何使用`sscanf`来有效地分割字符串。 `sscanf`函数的基本语法如下: ```c int sscanf(const char *str, const char *format, ...); ``` 这里,`str`是指向要读取的字符串的指针,`format`是一...

    c++实现字符串读取

    在计算机编程领域,特别是文件处理或数据解析任务中,经常会遇到需要按照特定规则(如空格、逗号等)来分割字符串的需求。C++作为一种强大的编程语言,提供了多种方式来实现字符串的分割与处理。本文将详细探讨一种...

    QR二维码生成开源 C/C++

    在C/C++中实现QR二维码生成,需要对位操作和字符串处理有深入理解。开发者需要创建数据结构来表示二维码,并编写函数来执行编码和绘制过程。C/C++提供了低级别的控制,允许高效且灵活的编码实现。 3. **QT4框架**...

    C/C++笔试题.doc

    在C++中,有多种方法可以实现字符串的逆序输出。一种常见的方式是使用数组存储字符串,然后通过双指针法交换首尾字符来达到逆序的效果。例如: ```cpp #include using namespace std; int main() { char a[50]; ...

    base64编解码C/C++实现

    6. **内存管理**:在C++中,处理字符串和二进制数据时需要注意内存分配和释放,避免内存泄漏。编码和解码过程中可能需要动态分配内存来存储临时结果。 7. **效率优化**:为了提高性能,可以在编码和解码过程中使用...

    C/C++正则表达式boost_1_34_1源码

    例如,你可以使用它来验证输入、提取子字符串、替换文本等。通过阅读和理解这个源码,开发者可以深入理解正则表达式的底层实现,这对优化性能和解决特定问题非常有帮助。 总的来说,"C/C++正则表达式boost_1_34_1...

    字符串按指定的字符串进行分隔

    总之,C++提供了多种方式来处理字符串的分隔,如`strtok`、`std::getline`和`std::stringstream`。在实际应用中,应根据具体情况选择合适的方法。了解和熟练掌握这些工具对于提升编程能力,尤其是进行数据处理和分析...

    20120324_字符串分割(C++)1

    总的来说,C++提供了多种方式进行字符串分割,从标准库中的`strtok`函数,到STL提供的`find`和`substr`,再到Boost库的`tokenizer`,每种方法都有其适用的场景和特点。开发者可以根据实际需求选择最合适的字符串分割...

    VC++字符串处理函数对照表(宽字符与ANSI字符)

    - **ANSI:** `strtok()` 分割字符串。 - **宽字符:** `wcstok()` 分割宽字符字符串。 - **通用:** `_tcstok()` 分割通用字符串。 - **宽字符串宽度:** - **宽字符串:** `wcswidth()` 获取宽字符串的宽度。 - **...

    C++常用字符串分割方法实例汇总

    Boost库提供了更为强大的字符串处理工具,例如`boost::algorithm::split`,它可以使用多种方式分割字符串,如按照字符、正则表达式等。使用Boost库需要先安装和包含相应的头文件,具体用法可以参考Boost官方文档。 ...

    字符串复制

    此外,字符串复制也是学习和掌握其他高级字符串操作(如替换、分割)的基础。 ### C++中字符串复制的实现 在C++中,可以使用标准库函数`strcpy`或手动实现循环来完成字符串复制。本节将基于给定的部分内容,详细...

    C++ programming

    `StringTokenizer.h` 是另一个自定义的头文件,用于分割字符串成多个子串。 #### 六、字符串类重命名 在某些情况下,可能需要重命名字符串类以避免名称冲突或为了更好地适应项目需求。 ##### 7.1 简单重命名 - **...

    VC++提取字符串 VS2008 提取字符串

    C++标准库提供了多种方法来操作和提取字符串,这里我们将重点讲解`std::string`类以及相关的函数。 首先,`std::string`是C++标准库中的一个类,用于存储和操作字符串。在VS2008中,我们可以创建`std::string`对象...

    ST32_Ymodem.rar_C/C++__C/C++_

    - 数据接收:通过中断或轮询方式读取串口数据,每个数据块由开始字符、数据、CRC校验和结束字符组成。 - Ymodem解析:解析接收到的数据块,验证CRC校验,处理错误和确认接收。 - 文件保存:根据Ymodem协议的指示...

    VC字符串处理

    在VC++编程环境中,`CString`是一个非常重要的类,它为C++程序员提供了方便的字符串操作功能...通过不断的练习和应用,你可以掌握更多高级技巧,比如使用`FormatV`进行复杂格式化,或者利用`Tokenize`方法分割字符串。

    华为OD机试 - 分割均衡字符串(Java & JS & Python & C & C++).html

    华为OD机试 - 分割均衡字符串(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法

    004.rar_Windows编程_C/C++_

    2. **分割字符串**:在C中,可以使用`strtok`函数根据空格或其他分隔符将字符串分割成单词。在C++中,可以使用`std::stringstream`或者`std::istringstream`配合`std::getline`来实现同样的功能。 3. **比较单词...

    《C++String深入详解2.0版》PDF

    `strtok` 和 `wcstok` 用于按照分隔符分割字符串。 **3.1.17 strupr/_strupr wcsupr/_wcsupr** `strupr` 和 `wcsupr` 用于将字符串转换为大写。 **3.2 更安全的 C 字符串函数** C 风格字符串函数容易引发安全...

    使用strtok函数截取字符串得到相应的子串存入数组中

    在C/C++编程中,`strtok`函数是一种常用的字符串处理工具,用于将字符串分割成多个子串。这个函数在处理复杂格式的数据时非常有用,比如解析包含多种数据类型的字符串。在给定的场景中,我们需要从一个字符串中提取...

Global site tag (gtag.js) - Google Analytics