string定义本质和与cstring的区别
头文件:一定要记得的加上
定义:string 类是 STL 中 basic_string 模板实例化得到的模板类。
本质:string是一个类是一个容器## 标题
区别: string与从cstring的区别是string可以进行+=,-=,>等运算但是cstring不能。
且string是c++中标准库函数,cstring可兼容c与c++支持格式的库函数。
string的基本构造函数
一 :‘=’赋值或者assign赋值;
先定义一个string类型变量:
string str;
(1) string s; //生成一个空字符串s (定义变量)
(2) string s(str) //复制构造函数 生成str的复制品
(3) string s(str,x) //访问从第X个元素开始的元素作为s的初值
(4) string s(cstr) //将C字符串作为s的初值
(5) string s(int num,c) //生成一个字符串,包含num个c字符
(6) string s(str,beg,end) //将区间[beg,end)输出不包含end
//
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str("Sweet tea");
string s1(str);//将string中元素复制到s1中
cout << s1 << endl;
string sx(str,6);//访问从第六个元素开始的后面的元素
cout << sx <<endl;
string sy("Sweet tea",5);//访问前5个元素
cout << sy << endl;
string s2("Sweet");//赋值给s3
cout << s2 << endl;
string s3(5,'A');//生成一个字符串,包含5个A
cout << s3 << endl;
string s4(str,0,5);//输出str中从0到5的元素不包含第五个元素
cout << s4 << endl;
return 0;
}
运行结果:
二:字符串拼接:
重载
string s1(“我”);
string s2;
s1+=“爱玩游戏”;(还可以直接加字符串 s1+=s2);
下面展示一些 内联代码片
。
//
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1("我");
s1+="爱玩游戏";
cout << s1;
return 0;
}
输出结果
append语法
string s2=‘I’;
s2.append(" love");
//
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s2="I";
s2.append(" love");
cout << s2;
return 0;
}
输出结果
或者s2.append(“love”,3)截取前三个(也可以加字符串)
//
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s2="I";
s2.append(" love",3);
cout << s2;
return 0;
}
输出结果
s2.append(s1,x,y)只截取从x到y的函数不包含y;
//
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s2="I";
string s1=" love";
s2.append(s1,0,4);
cout << s2;
return 0;
}
输出结果
string的库函数
一. 字符串查找:(有返回值,如果找到则会返回d的下标从0开始的,如果没有找到则会返回-1。)
1.find函数(查找数组指定字符串或者字符是否存在;从左向右查找找到左边最先出现的字符下标)
字符串
string s1(“abcdef”);
int t = s1.find(“de”);
s1.find(“字符串,3”) //代表从3位置开始找。
s1.find(“字符,x,y”) //从x位置查找前y个字符第一次出现字符的位置。
2.rfind函数(从右向左查找找到右边最先出现的字符下标)
二. 字符串替换:
1.replace函数
//
string s1="kove";
s1.replace(1,3,"222"); s1.replace(int x,int y," ");
//表示从x位置开始的y个字符结束替换成"222"
cout << s1;
三.字符串比较(实际上是进行ASCII码比较,逐个比较大小):
1.compare函数(主要用于比较字符串是否相等)
若=则返回0;
若>则返回1;
若<则返回-1;
//
string s1="hello";
string s2="hello";
if(s1.compare(s2) == 0)
{
cout <<"相等"<< endl;
}
else if(s1.compare(s2)>0 )
{
cout << "s1大于s2" << endl;
}
else if(s1.compare(s2)<0 )
{
cout << "s1小于s2" << endl;
}
四.字符存取
1.可直接采用下标方式取用[ ]
2.采用at方式
*下标方式比较简单直接读取即可
//
string s1="hello";
for(int i=0;i<s1.size();i++)
{
cout << s1.at(i) <<" ";//读取;
}
//修改
s1.at(0) = 'x';
五.插入和删除
1.insert插入函数和erase删除函数
***(插入和删除的下标都是从0开始的)
*前两个是c风格和c++风格的两种不同形式本质上相同
//
string str = "hello";
//插入
str.insert(1,"111")//在1位置插入三个1
str.insert(1,3,"k")//在1位置插入三个字符k
//删除
str.erase(1,3)//删除从1位置起3个字符
六:字符串获取(从字符串中截取一小段我们想得到的字符串)
substr函数
pos起始位置 npos是截取个数
//
string s1;
string str = "Sweet tea";
s1=str.substr(6,3);
cout << s1 << endl;
//从邮件中获取姓名
string s2 = "zhangsan@qq.com";
int t = s2.find("@");
cout << s2.substr(0,t);
七.交换函数swap
void swap( basic_string &str );
//
string s1 = "I love";
string str = "Sweet tea";
str.swap(s1);
cout << str <<" "<< s1<< endl;
输出结果
八.字符串反转函数reverse
//
//需要使用algorithm头文件
string str = "Sweet tea";
reverse(str.begin(),str.end());
cout << str << endl;
九.复制函数copy
size_type copy( char *str, size_type num, size_type index );
将内容复制为一个**字符数组**
copy()函数拷贝自己的num个字符到str中(从索引index开始)。返回值是拷贝的字符数
//
string str = ("Sweet tea");
char s1[10];
str.copy(s1,5,0);
//将str中的从0开始的5个元素复制到s1数组中
cout << s1 << endl;
输出结果
十.重新设置字符串大小函数resize
void resize( size_type num );
void resize( size_type num, char ch );
重新设置字符串的大小
resize()函数改变本字符串的大小到num, 新空间的内容不确定。也可以指定用ch填充。
//
string str2( "123456789" );
str2.resize(5);
cout << str2 << endl;
cout << str2.size() << endl;
运行结果
十一.字符串大小函数size和length
//
string str = ("Sweet tea");
int x,y;
x = str.size();
y = str.length();
cout << x << " " << y << endl;
输出结果
十二.当前字符容量函数capacity和扩容reserve和resize函数
size_type capacity();
返回重新分配空间前的字符容量
//
//输出内存大小
string s("To be or not to be");
cout<<s.capacity();
输出结果为23
reserve
void reserve( size_type num );
让操作者能够请求内存块的最小长度,也就是将容量变大,但不能变小。
//
//修改内存大小
s.reserve(50);//如果输入s.reserve(17),也就是小于原来的18,容量值还是18
cout<<s.capacity()<<endl;
//
s14.resize(100);
cout << s14.capacity() <<endl;
输出结果为100
十三.字符串指定输出assign函数
//
string s17;
s17.assign("what are you saying",5);
s17.assign(5,'c')//把五个字符c赋值给s17
输出结果
十四.全输出c_str函数
//
string s16="That is a question";
cout<<s16.c_str()<<endl;
string库函数整体实现
//
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
cout << "字符查找1" <<endl;
string s1("abcdefbc");
int t = s1.find("bc");
int p = s1.find("bc",3); //从位置三开始查找
cout << t << " " << p << endl;
cout << "字符查找2" <<endl;
string s2("abcdefbc");
int x = s2.rfind("bc");
cout << x << endl;
cout << "字符串替换" <<endl;
string s3("abcde");
cout << s3.replace(1,3,"1111") <<endl;
cout << "字符串比较" <<endl;
string s4="hello";
string s5="hello";
if(s4.compare(s5) == 0)
cout <<"相等"<< endl;
else if(s4.compare(s5)>0 )
cout << "s4大于s5" << endl;
else if(s4.compare(s5)<0 )
cout << "s4小于s5" << endl;
cout << "字符存取" <<endl;
string a="123456789";
cout << a[1] << endl;
cout << a.at(2) << endl;
cout << "插入和删除" <<endl;
//插入
string s6 = "hello";
cout << s6.insert(1,"222") <<endl;
cout << s6.insert(1,3,'a') <<endl;
//删除
cout << s6.erase(1,3) <<endl;
cout << "字符串获取" <<endl;
string s7;
string str = "Sweet tea";
s7=str.substr(6,3); //起始位置和截取个数
cout << s7 << endl;
//从邮件中获取姓名
string s8 = "zhangsan@qq.com";
int l = s8.find("@");
cout << s8.substr(0,l) << endl;
cout << "交换函数" << endl;
string s9 = "I love";
string s10 = "Sweet tea";
s10.swap(s9);
cout << s10 <<" "<< s9<< endl;
cout << "字符反转" << endl;
//需要使用algorithm头文件
string s11 = "Sweet tea";
reverse(s11.begin(),s11.end());
cout << s11 << endl;
cout << "复制函数" <<endl;
string s12 = ("Sweet tea");
char s13[10];
str.copy(s13,5,0);
//将s12中的从0开始的5个元素复制到s13数组中
cout << s13 << endl;
cout << "重置字符串大小" <<endl;
string str2( "123456789" );
str2.resize(5);
cout << str2 << endl;
cout << str2.size() << endl;
cout << "字符串大小" << endl;
string s15 = ("Sweet tea");
int q,y;
q = s15.size();
y = s15.length();
cout << q << " " << y << endl;
cout << "当前字符容量" <<endl;
//输出内存大小
string s14("To be or not to be");
cout<<s14.capacity() <<endl;
//修改内存大小(只能变大不能变小)
s14.reserve(50);//如果输入s14.reserve(17),也就是小于原来的18,容量值还是18
cout<<s14.capacity()<<endl;
s14.resize(100);
cout << s14.capacity() <<endl;
cout<<"指定输出:\n";
string s17;
s17.assign("what are you saying",5);
cout<<s17<<endl;
cout<<"全输出:\n";
string s16="That is a question";
cout<<s16.c_str()<<endl;
return 0;
}
输出结果
其他
getline直接读取一行可以读空格;getline是读取一行,其实是包括回车的(但读取的内容里头是没有回车的),此时再读取已经到了下一行
1)利用cin读取 字符串
cin使用空白(空格、制表符、换行符(通过回车符输入))来确定字符串的 结束位置 ,这意味着 通过cin读入字符数组时只读取一个单词 ,空白仍保留在流中,读取该单词后,cin将该字符串放在数组中,并自动在结尾加入空字符(‘\0’); 流中单词之前的空白将被忽视,而直接保存单词;单词之后的空格仍保存在流中!
2)cout输出字符数组时注意的问题
输出时,逐个输出字符直到遇到结束符\0为止。
作者:渔yyy
ps:以上是c++ string知识点全部内容,希望文章能够帮你解决c++ string知识点所遇到的游戏开发问题。
本文收录在 游戏编程 🕹️ - 学习C++专题,分享走一走~
您可以在登录后,发表评论