STL-----string 用法

其实string算不算是属于stl中的一个内容,博主自己也不太清楚,但是它确实是具有标准接口的,所以这里博主就暂且当它是了。
string它是后来标准库封装好的用来管理字符串的类模板,和char有一些不同。但是这里有句话我想要对大家说,如果大家对自己阅读源码的信心不是很足的话,我建议大家不要死扣他们之间的不同。例如:有很多人会说char数组不能存储结束符,string可以。那我只能说,这里面还是有很多隐晦的地方的,不信大家可以私底下去试试。
好了,言归正传,博主这里没有介绍二者的不同,因为除非有这个必要,不然大家最好用string。毕竟我们这里讨论的是C++,不是C,string的封装与它的接口会让你在后续的开发过程中比char*简洁太多。
然后博主这里这要介绍三个方面:1,其他数据转换成string,2,string转换成其他数据,3,关于string的一些小函数。这些函数虽然小,但是很多时候还是很有用的,可以帮助你快速开发。
好了,剩下的,博主会在代码中细细和大家讲。

// blog_STL_string.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
#include
using namespace std;
void my_to_string()
{
cout<<"This is my_to_string function!"<<endl;
string str1;
{
//int to string
int int_str=234;
str1=to_string((long double)int_str);//这里函数在string头文件中,这里为什么把int转换成long double?大家可以看看源码就知道什么叫多重重载了
cout<<"int value: "<<int_str<<" string value: "<<str1<<endl;
}
{
//char to string
char char_str='a';
stringstream ss;//这里使用的是stringstream,C++中有三个非常重要的流。ios,fs,ss。。。。这三个流都是不可赋值和拷贝的。这里用的是ss流,其实就是把char(其实char ,float等等都是可以的)读进ss,然后ss再写入str中。读者也可以用ss.str()可以达到同样的目的
ss<<char_str;
ss>>str1;
cout<<"char value: "<<char_str<<"   string value: "<<str1<<endl;
}
{
//char* to string
char * char_ptr=new char[5];
strcpy(char_ptr,"xiao\0");
str1=char_ptr;//其实char*到string是有隐式转换的,所以直接赋值就可以了
cout<<"char value: "<<char_ptr<<" string value: "<<str1<<endl;
delete []char_ptr;//这里删除的是一个数组,不是单个内容。
//其实这里用裸指针是很不安全的,但是呢这里只是作为string的演示,博主就从简了。如果以后博主有时间,再给大家讲一讲shared_ptr,讲讲boost的内存池是如果管理内存的。
}


}
void my_string_to()
{
cout<<"This is my_string_to function!"<<endl;
stringstream stream;
string str1="1234";
stream<<str1;
//string to double
double double_value;
stream>>double_value;//这里是用ss流讲string读入,然后再赋值给double
cout<<"string value: "<<str1<<" double value: "<<double_value<<endl;
//string to char*
char * char_value=new char[5];
strcpy(char_value,str1.c_str());//这里将string转换成char*是没有隐式转化的,所以这里要str.c_str()得到的是一个C风格的字符串,然后将这个字符串利用strcpy入char*
cout<<"string value: "<<str1<<" char value: "<<char_value<<endl;
delete []char_value;
}
void string_fun()
{
//其实关于string的fun是有很多的,但是这里博主就点几个比较常用的fun。其实string可以利用的fun还有stl中的algorithm,毕竟是有一样的接口的。
cout<<"This is string_fun"<<endl;
string str="xiaozuonanjing";
cout<<""<<str<<endl;
//Traversal all the elements
const int str_size=str.size();
//sometimes string just like char *
for(int tempi=0;tempi
{
cout<<str[tempi]<<" ";//string是可以像CHar数组那样进行下标寻址的,所以是可以可以用str[0],str[1]....来访问第一个。第二个元素。
}
cout<<endl;
//iterator traversal
for(string::iterator iter=str.begin();iter!=str.end();++iter)
{
cout<<*iter<<" ";//这里是利用迭代器来进行遍历,其实利用迭代器遍历在stl中是非常普遍和重要的。大家如果有兴趣的话可以认真研究研究一下这里的循环,其实是很普遍又重要的。
}
cout<<endl;
//some adding and removing elements function
str.push_back('s');//string其实是可以动态增长和删除的,所以这里pusk_back是在string后面添加元素
cout<<str<<endl;

str.pop_back();//将string最后的一个元素弹出来
cout<<str<<endl;

cout<<str.find_first_of('n')<<str[str.find_first_of('n')]<<endl;//找到第一个指定的元素,并且返回元素所在的位置

str.reserve();//将string反转,其实algorithm中也有reserve(str.begin(),str.end()),效果是相同的,但是用这个更好
cout<<str<<endl;
str.reserve();

cout<<str.substr(0,4)<<endl;//这里sunstr是一种裁剪,sunstr(first,last),返回的是一个新的string,内容是从指定的string内部截取下来的[first,last)
cout<<str<<endl;//截取完了之后,其实原string没有变化



}
int main()
{
my_to_string();
my_string_to();
string_fun();
return 0;
}
输出结果:
STL-----string <wbr>用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值