萌新不看会后悔的C++string字符串常用知识点总结
一. 前言
前面学习字符串的时候简单说了string字符串和C风格字符串的不同,今天来详细的学习一下string字符串 过去学习C的时候,想要使用字符串应该是如下的格式: char a[] = “hello world”; //这里省略了 ,但编译器会我们自动添加并隐藏 再高级一点: char * b = “hello world”; 输入字符串: scanf("%s", a);//很多C初学者常犯的一个错就是给a取地址,其实这里的a已经是地址了,无需使用&取地址符 输出字符串: cout << a << endl; cout << b << endl; 如果我们想让两个字符串相加: strcat(a, a); 别问我为什么不使用strcat(a,b);因为程序会炸。 cout << a << endl; 或者是复制: strcpy(a, a); 上面所说的是C风格的字符串,C++的标准库增加了string类,string字符串比C语言中的字符串更加方便,更加强大,更加安全。 既然是C的超集,怎么能没有点新东西来替代C呢,嘿嘿。
二. string字符串(正题)
1. 字符串初始化,赋值,拼接,附加
进入今天的正题,string类型被定义在string头文件。
string str_1 = "hello world"; //拷贝初始化
string str_2 = { "hello world" }; //拷贝初始化
string str_3("hello world"); //直接初始化
string str_4{ "hello world" }; //直接初始化
//可以使用上面任意一种来初始化string对象,并且string字符串是不保存' '的,string对象有自己的成员函数
//用来记录字符串大小,所以不变判断字符串结尾
//赋值
string str;
char a[20] = { "abcde" };
str = a;
cout << str << endl;
char *b = { "eeee" };
str = b;
//拼接 附加
cout << str << endl;
str = str + a;
cout << str << endl;
str = str + b;
cout << str << endl;
事实就是string更加方便,更加安全,更加强大,string兼容了C的字符串
运行结果:
2. 字符串长度的函数
//在C++新增string之前,想要拼接需要使用strcpy(),想要使用附加使用strcat()
//当然,string对象也是可以使用上述函数,另外在C种操作字符串赋值时存在这样问题:
char site[10] = { "abcdef" };
char site_2[10] = { "aaaaa" };
//strcat(site, site_2);
//这样将发生错误,无法存储目标大小之外信息导致程序崩溃
//C为了避免上述情况,提供了strncat()和strcpy()两个函数,函数多了一个参数,就是允许长度的最大值
//求长度可以使用strlen();
//新增的string类提供许多成员函数,用来简化繁琐的操作
//字符串长度的函数:
string str = "花狗";
cout << str.size();
cout << str.length();
size()和length()没有区别,都是返回字符串的字节数
运行结果:
3. string转换为char *
const char * c = str.c_str();//返回以' '结尾的字符串
const char * ca = str.data();//生产的字符串有没有' '不确定
cout << c << endl;
cout << ca << endl;
c_str()函数会返回一个以’ ’结尾的字符串,而data()没有标准,查看两个函数定义:
return pointer to null-terminated nonmutable array 指明c_str会返回带有空字符结尾的字符串,但是data没有提及。
4. 判断string对象是否为空
string str;
if(str.empty())
{
//……
}
5. int类型转string
#include<sstream>
int number = 123;
stringstream s;
s << number;
string str_1 = s.str(); //第一种
s >> str_1; //这种写法也可以
cout << str_1;
//第二种
int number_2 = 123;
string str_3;
str_3 = to_string(number_2);
cout << str_3;
这里不单单指int类型,包括整形和浮点型,既然涉及到了stringstream,再说一个例子:
6. string类型转int
string str;
while(getline(cin,str))
{
int num;
stringstream s(line);
while(ss>>x)
{
cout<<x<<endl;
}
}
读者应该看出来了,这是字符串转整形,知识是需要学会灵活运用,学会了正向,也要思考逆向。
7. 向string字符串插入字符
string str = "hello my name huagou ";
string str_1 = "is ";
str.insert(14, str_1);
cout << str;
//insert有很多变体,如果有兴趣可自行查看
8.对string字符串进行查找
string str = " y hello my name is zhangxv";
string str_1 = "my";
if (str.find(str_1)!=string::npos)//find其实还有一个参数为起始查找位置,默认为0,找到会返回下标
{
cout << "找到了";
}
//是不是C风格的字符串方便多了呢?字符和字符串都是可以查找的。
//find函数的返回值是整数,假如字符串存在包含关系,其返回值必定不等于npos(一个常数)
//num = s.find_first_of(str) 返回str出现在母串s中的首次出现的位置
//num = s.find_last_of(str) 返回str出现在母串s中的最后一次出现的位置
不同点:
find(): 查找字符串中第一次出现字符c、字符串s的位置;
find_first_of(): 查找字符串中字符c、字符数组s中任意一个字符第一次出现的位置。
string字符串就写到这里喽。拜拜!
- 仿刮刮乐刮奖效果
- Spacebuilder在Mono上运行修改备忘
- maven配置详解
- 这一新的可视化方法教你优雅地探索相关性
- LSTM Networks在股票市场上的探究
- MSBuild的简单介绍与使用
- actionbar详解(二)
- actionbar完全解析(一)
- android galley实现画廊效果
- RavenDB:基于Windows/.NET平台的NoSQL数据库
- 神经网络算法交易:波动预测与定制损失函数
- 贝叶斯深度学习:桥接PyMC3和Lasagne构建层次神经网络
- How does it work in Mono's C# compiler?
- Cross-Origin Resource Sharing协议介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法