IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 实现自己的字符串分割(split())函数 -> 正文阅读

[C++知识库]C++ 实现自己的字符串分割(split())函数

//string and  c-string

#define _CRT_SECURE_NO_WARNINGS  //用来关闭warning功能

#include <iostream>
#include <cstring>
#include <string>
#include <cstring>

using namespace std;


//未使用strcpy、strtok等函数的安全版本(strcpy_s、strtok_s)时,若未加上关闭warning的语句,则运行时会发生错误!
//关闭warning的代码: #define _CRT_SECURE_NO_WARNINGS
void string_split_0(string& str, char split_char)
{
	char* cstr = new char[str.length() + 1];
	strcpy(cstr, str.c_str());

	//c_str now contains a c-string copy of str
	/*
	* 1.c_str()返回一个指向正规C字符串的指针常量,内容与本string串相同;
	* 2.这是为了与C语言兼容,在C语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。
	* 
	* 3.c_str是一个内容为字符串指向字符数组的临时指针;
	* 4.c_str返回的是一个可读不可改的常指针;
	* 注:一定要使用strcpy()函数等来操作方法c_str()返回的指针。
	*/

	char* p = std::strtok(cstr, " ");
	while (p != 0)
	{
		std::cout << p << '\n';
		p = strtok(NULL, " ");
	}

	delete[] cstr;
}


//使用strcpy_s、strtok_s函数时 遇到的问题
void string_split_1(string& str, char split_char)
{
	char* cstr = new char[str.length() + 1];

	//strcpy_s()函数有两个版本,用两个参数、三个参数都可以,只要保证缓冲区的大小即可。
	//两个参数时:
	/*
	* errno_t strcpy_s(char (&strDestination)[size], const char *strSource);
	*/
	//三个参数时:
	/*
	* errno_t strcpy_s(char& strDestination, size_t numberOfElements, const char* strSource);  //指定了长度,不易出现缓冲区大小的问题!
	*/
	//若使用new来分配存储空间时,就会出现上面说的不能保证缓冲区大小的问题了。
	strcpy_s(cstr, str.length() + 1, str.c_str());  //+1的原因:字符串结尾的‘\n’

	rsize_t len = sizeof(cstr);
	const char* delim = " ";
	char* next_token;

	//char* __cdcel strtok_s(
	//  _Inout_opt_z_  char* _String;
	//  _In_z_         char const* _Delimiter,      //Delimiter:定界符,分隔符;
	//  _Inout_ _Deref_prepost_opt_z_ char** _Context
	// );
	char* p = strtok_s(cstr, delim, &next_token);


	while (p != 0)
	{
		std::cout << p << '\n';
		p = strtok_s(NULL, delim, &next_token);
	}

	delete[] cstr;
}


int main()
{
	string str = "please split this sentence into tokens";
	string_split_0(str, ' ');
	std::cout << std::endl;
	string_split_1(str, ' ');
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:51:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:03:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码