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++ string字符串处理详情 -> 正文阅读

[C++知识库]c++ string字符串处理详情

字符串分割

char*  strtok_s(char*  _String, char const* _Delimiter, char**  _Context);

参数: 1、源字符串
2、分割符
3、切割后剩余的字符串,例如:ff,gg ,以,号分割,ff会被函数返回,gg则存在 _Context 中
返回值:指向被分割出片段的指针

在第一次调用时,strtok()必需给予参数_String字符串,往后的调用可以将参数_Str设置成NULL。每次调用成功则返回指向被分割出片段的指针。

需要调用者在连续切分相同源字符串时,除了将_String参数赋值为NULL,还要传递上次切分时保存下的_Context。

示例:

	char ca[] = "zzz[fff]aa,bb,cc";
	p[i] = strtok_s(ca, "]", &buf); //以]分隔

	//p[i]为:zzz[fff 。  buf为:aa,bb,cc
	cout << p[i] << "  分割  " << buf << endl;

	//这会将bug中的所有数据取到p。buf没数据后赋值null给p,p[null]就会退出循环 
	while (p[i]) {
		i++;
		p[i] = strtok_s(NULL, ",", &buf);
		if (NULL == p[i])
			break;
		cout << p[i] << endl; //输出结果:aa  bb  cc
	}

截取字符str前的元素,或后的元素

	string stream = "hellfllgg";
	string str = "f";
	//find指定范围内查找和目标元素值相等的第一个元素。
	int nPos = stream.find(str);

	//str前面的字符串
	if (nPos != -1) {
		//substr从开始的n个字符串的拷贝
		string st2 = stream.substr(0, nPos);
		cout << endl << st2;
	}

	//str后面的字符串
	if (nPos != -1) {

		string st1 = stream.substr(nPos + str.size(), stream.size());
		cout << endl << st1;
	}
	
	cout << stream;

find( )函数:
功能:用于在指定范围内查找和目标元素值相等的第一个元素。
返回值:指向范围中与val比较相等的第一个元素的迭代器

substr( ),复制子字符串

定义:string substr (size_t pos = 0, size_t len = npos) const;

复制从字符位置 pos 开始并跨越 len 个字符的部分(或直到字符串的结尾)。

 std::string str="We think in generalities, but we live in details.";

  std::string str2 = str.substr (3,5);     // 从第3个字符位置开始,往后复制5个字符。

  std::size_t pos = str.find("in");      // 查询字符in的位置

  std::string str3 = str.substr (pos);     // 从字符in位置复制到字符串结尾
  std::cout << str2 <<"\n"<<str3<<"\n";
  
  /*运行结果
	think
	ink in generalities, but we live in details.
 */

  

find_first_not_of( ):不匹配的第一个字符

size_t find_first_not_of (const string& str, size_t pos = 0) const noexcept;

在字符串中搜索与参数str不匹配的第一个字符。
当指定pos时,仅搜索pos位置后的字符,忽略之前的。

  std::string str ("fvvvvvbagff cc");

  //查找与字符串"v"不匹配的第一个字符,从位置3后开始。
  std::size_t found = str.find_first_not_of("v",3);

  if (found!=std::string::npos)
  {
    std::cout << str[found]<<"\n";
    std::cout  << found << '\n';
  }

/*
	输出结果:
	b
	6
*/

可以配合erase来删除字符串前尾的空格

	string s = "  ffjdkjfk ";
	//删除字符串前面的空格
	strToken.erase(0, s.find_first_not_of(" "));
	//删除字符串后面的空格
	strToken.erase(s.find_last_not_of(" ") + 1);

strstr,查找子串第一次出现的位置

char * strstr ( const char * str1, const char * str2 );

返回值:str2在str1中第一次出现的位置,没有就返回空。

  char str[] ="Tjjajjjhhhhhhh";
  char * pch;
  pch = strstr (str,"a"); //a在str字符串中第一次出现的位置
  if (pch != NULL)
  	//将2个字符复制到pch,参数3代表复制的最大字符数,参数2为要复制的字符
    strncpy (pch,"vvvv",2);
    
  puts (str); //输出 Tjjvvjjhhhhhhh
  return 0;

strncpy,复制字符串

char * strncpy ( char * destination, const char * source, size_t num );

复制 num 个 source 字符串到 destination 中,source为要复制的字符串。

erase,删除元素

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

有三种用法:

(1)erase( pos, n); 删除从pos开始的n个字符,例如erase( 2, 7),删除2位置开始的7个字符

(2)erase( position); 删除position处的一个字符(position是个string类型的迭代器)

(3)erase(first,last);删除从first到last之间的字符,(first和last都是迭代器)

以空格分开字符串

‘“>>” 输入时检测到空白就会扔掉

    istringstream s("ff kkk erere"); //原始数据
	string f;
	while (s>>f)
	{
		cout << f << endl; //以空格分割后的数据
	}

/*
	输出:
	ff
	kkk 
	erere 
*/
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:36:23  更:2021-10-15 11:38:53 
 
开发: 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 3:32:01-

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