字符串C++/C

标准C++中的string类的用法总结 - xFreedom - 博客园

17.C++-string字符串类(详解) - 诺谦 - 博客园

c++ stringstream(老好用了) - 胡峻峥 - 博客园

​​​​​​C++中数字与字符串之间的转换 - 阿凡卢 - 博客园

1. 头文件

 #include <string>
  • string直接支持字符串连接
  • string直接支持字符串的大小比较
  • string直接支持子串查找和提取
  • string直接支持字符串的插入和替换
  • string同时具备字符串数组的灵活性,可以通过[ ]重载操作符来访问每个字符。

2. 构造函数

string str;        //生成一个空字符串
 
string str ("ABC")  //等价于 str="ABC"<br>
string str ("ABC", strlen)  // 将"ABC"存到str里,最多存储前strlen个字节
 
string s("ABC",stridx,strlen)   //将"ABC"的stridx位置,做为字符串开头,存到str里.且最多存储strlen个字节.
    
string s(strlen, 'A')  //存储strlen个'A'到str里

3. 常用成员函数

str1.assign("ABC");        //清空string串,然后设置string串为"ABC"
 
str1.length();                 //获取字符串长度
 
str1.size();            //获取字符串数量,等价于length()
 
str1.capacity();          //获取容量,容量包含了当前string里不必增加内存就能使用的字符数
 
str1.resize(10);           //表示设置当前string里的串大小,若设置大小大于当前串长度,则用字符\0来填充多余的.
str1.resize(10,char c);     //设置串大小,若设置大小大于当前串长度,则用字符c来填充多余的
 
str1.reserve(10);         //设置string里的串容量,不会填充数据.
str1.swap(str2);              //替换str1 和 str2 的字符串
 
str1.puch_back ('A');      //在str1末尾添加一个'A'字符,参数必须是字符形式
  
str1.append ("ABC");       //在str1末尾添加一个"ABC"字符串,参数必须是字符串形式
 
str1.insert (2,"ABC");       //在str1的下标为2的位置,插入"ABC"
 
str1.erase(2);             //删除下标为2的位置,比如: "ABCD" --> "AB"
 
str1.erase(2,1);              //从下标为2的位置删除1个,比如: "ABCD"  --> "ABD"
 
str1.clear();              //删除所有
 
str1.replace(2,4, "ABCD"); //从下标为2的位置,替换4个字节,为"ABCD"
 
str1.empty();            //判断为空, 为空返回true

4. 字符串流处理

C++ ostringstream、istringstream、stringstream 用法浅析_hellokandy的博客-CSDN博客_istringstream和stringstream

通过定义 ostringstream 和 istringstream 变量实现,头文件 #include <sstream>;

  • ostringstream : 用于执行C风格字符串的输出操作。——用来格式化字符串,避免申请大量的缓冲区,替代sprintf。


void ostringstream_test()
{
	//ostringstream 只支持 << 操作符
	std::ostringstream oss;
	oss << "this is test" << 123456;
 
	oss.str("");//清空之前的内容
	//oss.clear();//并不能清空内存
 
	//浮点数转换限制
	double tmp = 123.1234567890123;
	oss.precision(12);
	oss.setf(std::ios::fixed);//将浮点数的位数限定为小数点之后的位数
	oss << tmp;
 
	std::cout << oss.str() << "\r\n" << std::endl;
}
//  123.123456789012
  • istringstream : 用于执行C风格字符串的输入操作。

void istringstream_test()
{
	//istringstream 只支持 >> 操作符
	std::string str = "welcome to china";
	std::istringstream iss(str);
 
	//把字符串中以空格隔开的内容提取出来
	std::string out;
	while(iss >> out)
	{
		std::cout << out << std::endl;
	}
	std::cout << "\r\n" << std::endl;
}
// welcome
// to
// china
  • stringstream  : 同时支持C风格字符串的输入输出操作。


void stringstream_test()
{
	//输入
	std::stringstream ss;
	ss << "hello this is kandy " << 123;
	std::cout << ss.str() << "\r\n" << std::endl;
 
	//输出
	std::string out;
	while(ss >> out)
	{
		std::cout << out.c_str() << std::endl;
	}
	std::cout << "\r\n" << std::endl;
}
// hello this is kandy 123

//hello
//this
//is 
//kandy
//123

5. string 实现字符串分割函数split()——4种方法

C++中string如何实现字符串分割函数split()——4种方法_我行我素,向往自由的博客-CSDN博客_c++ string 分割

  • 使用stringstream流

使用getlint读取数据,选择接收的格式

// istream & getline(char* buf, int bufSize);	// 读到 \n 为止
istream & getline(char* buf, int bufSize, char delim); 
//读到 delim 字符为止
// \n 或 delim 都不会被读入 buf,但会被从文件输入流缓冲区中取走
void Stringsplit(string str,const const char split)
{
	istringstream iss(str);	// 输入流
	string token;			// 接收缓冲区
	while (getline(iss, token, split))	// 以split为分隔符
	{
		cout << token << endl; // 输出
	}
}

 

  • 使用string类提供的find方法和substr方法

C++string类中substr()函数的使用方法_&Mr.Gong的博客-CSDN博客_c++ string substr方法

size_type find( const basic_string& str, size_type pos = 0 ) const;
// pos开始搜索的位置
basic_string substr( size_type pos = 0, size_type count = npos ) const;
// pos 起始位置,count 子串的长度————————复制字符串
void Stringsplit(const string& str, const char split, vector<string>& res)
{
	if (str == "")		return;
	//在字符串末尾也加入分隔符,方便截取最后一段
	string strs = str + split;
	size_t pos = strs.find(split);
 
	// 若找不到内容则字符串搜索函数返回 npos
	while (pos != strs.npos)
	{
		string temp = strs.substr(0, pos);
		res.push_back(temp);
		//去掉已分割的字符串,在剩下的字符串中进行分割
		strs = strs.substr(pos + 1, strs.size());
		pos = strs.find(split);
	}
}

  • 使用C库函数strtok

C++中strtok()函数的用法_Angelia_zhu的博客-CSDN博客_c++ strtok

char* strtok( char* str, const char* delim );
// 分解字符串为一组字符串,s为要分解的字符串,delim为分隔字符串

  • 使用regex_token_iterator(正则表达式)

6. C语言中string函数详解

C语言中string函数详解_sunnylgz的博客-CSDN博客_c语言string

char *strdup(const char *s)    //字符串拷贝

char* strcpy(char* str1,char* str2);     //把str2指向的字符串拷贝到str1中去 
 
 char *strncpy(char *dest, const char *src,intcount)   //将字符串src中的count个字符拷贝到字符串dest中去 

char* strcat(char * str1,char * str2);   //把字符串str2接到str1后面,str1最后的'\0'被取消 

char *strncat(char *dest, const char *src, size_t maxlen)   //将字符串src中前maxlen个字符连接到dest中 

int strcmp(char * str1,char * str2);   // 比较两个字符串str1,str2. 

 int strncmp(char *str1,char *str2,int count)   //对str1和str2中的前count个字符按字典顺序比较 

 char* strchr(char* str,char ch);   //找出str指向的字符串中第一次出现字符ch的位置 

char* strstr(char* str1,char* str2);   //找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 

 char *strtok(char *s1, const char *s2)   //分解s1字符串为用特定分隔符分隔的多个字符串(一般用于将英文句分解为单词) 

void *memcpy(void *dest, const void *src, size_t n)   //字符串拷贝 

void *memccpy(void *dest, const void *src, int c, size_t n)   //字符串拷贝,到指定长度或遇到指定字符时停止拷贝 

void *memchr(const void *s, int c, size_t n)   // 在字符串中第开始n个字符中寻找某个字符c的位置 

 int memcmp(const void *s1, const void *s2,size_t n)   //按字典顺序比较两个串s1和s2的前n个字节  


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值