/*
11.12
string是c++风格的字符串,而string本质上是一个类
string和char*的区别
char*是一个指针
string是一个类,类内部封装了char*管理这个字符串,是一个char*型的容器
string的特点:
string类内部封装了很多成员方法
例如:查找:find 拷贝:copy 删除:delete 插入:insert
string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
总结:string的多种构造方法没有可比性,灵活使用即可
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
//string ();创建一个空的字符串
string s1;//默认构造
//string(const char* s)使用字符串初始化
const char* str ="hello world";
string s2(str);
cout << "s2=" << s2 <<endl;
//string(const string str) 使用一个string对象初始化另一个string对象
string s3=(s2);
cout << "s3=" << s3 <<endl;
//string(int n,char c)使用n个字符c初始化
string s4(10,'a');
cout << "s4=" << s4 <<endl;
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string 赋值操纵
赋值的函数原型:
string& operator=(const char* s); //char*类型字符串赋值给当前的字符串
string& operator=(const string &s); //把字符串s赋给当前的字符串
string& operator=(char c); //字符赋值给当前的字符串
string& assign(const char *s); //把字符串s赋给当前的字符串
string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s); //把字符串s赋给当前字符串
string& assign(int n, char c); /用n个字符c赋给当前字符串
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string str1;
str1="abc";
cout << "str1=" << str1 << endl;
string str2;
str2=str1;
cout << "str2=" << str2 << endl;
string str3;
str3='x';
cout << "str3=" << str3 << endl;
string str4;
str4.assign("xyzc++");
cout << "str4=" << str4 << endl;
string str5;
str5.assign("xyzc++",5);
cout << "str5=" << str5 << endl; //xyzc+
string str6;
str6.assign(str5);
cout << "str6=" << str6 << endl;
string str7;
str7.assign(10,'6');
cout << "str7=" << str7 << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string 字符串拼接:实现在字符串末尾拼接字符串
函数原型:
string& operator+=(const chan* str); //重载+=操作符
string& operator+=(const char c); //重载+=操作符
string& operator+=(const string& str); //重载+=操作符
string& append(const char *s); //把字符串s连接到当前字符串结尾
string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s); //同operator+=(const string& str)
string& append(const string &s, int pos, int n); //字符串s中从pos开始的n个字符连接到字符串结尾
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string s1="我";
s1+="喜欢音乐";
cout << s1 << endl;
s1+="~";
cout << s1 << endl;
string s2="abcccc";
s1+=s2;
cout << s1<<endl;
string s3="I";
s3.append(" love");
cout << s3 << endl;
s3.append("abcdefg",5);
cout << s3<< endl;
s3.append(s2);
cout << s3 << endl;
s3.append(s2,0,3);
cout << s3 << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string 查找和替换
查找:查找指定字符串是否存在
替换:在指定的位置替换字符串
函数原型:
int find(const string& str, int pos=0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos=0) const; //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos0) const; //查找字符C第一次出现位置
int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos=0)const; //查找字符C最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串s
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
//查找
//find从左往右找
string s1="abcdefghde";
int pos =s1.find("de");
cout << "pos=" << pos << endl;//3
int pos2=s1.find("iv");
if(pos2==-1)
{
cout << "未找到" << endl;
}
else
{
cout << "找到pos2=" << pos2 << endl;
}
//rfind从右往左找
int pos3 =s1.rfind("de");
cout << "pos3=" << pos3 << endl;//8
}
//替换
void test02()
{
string s1="abcdefghigk";
s1.replace(1,3,"11111");//从1号位置起3个字符替换成11111
cout << "s1=" << s1 <<endl;//s1=a11111efghigk
}
int main()
{
//test01();
test02();
system("pause");
return 0;
}
*/
/*string 字符串比较
=返回0
>返回1
<返回-1
函数原型:
int compare(const string &s)const; //与字符串s比较
int compare(const char *s) const; //与字符串s比较
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string s1="abcd";
string s2="bbcd";
if(s1.compare(s2)==0)
{
cout << " 相等 " << endl;
}
else if(s1.compare(s2)>0)
{
cout << " s1>s2 " << endl;
}
else
{
cout << " s1<s2 " << endl;
}
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string 字符串存取
string中单个字符存取方式有两种
char& operator[](int n); //通过[]方式取字符
char& at(int n); //通过at方法获取字符
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string s1="abcdefghijk";
for(int i=0;i<s1.size();i++)
{
cout << s1[i] << " ";
}
cout << endl;
for(int i=0;i<s1.size();i++)
{
cout << s1.at(i) << " ";
}
cout << endl;
s1[0]='x';
cout << s1 << endl;
s1.at(1)='x';
cout << s1 << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string中的插入和删除
函数原型:
string& insert(int pos, const char*s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n,charc); //在指定位置插入n个字符c
string& erase(int pos, int n=npos); //删除从Pos开始的n个字符
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string s1="abcdef";
s1.insert(1,"11111");
cout << s1 << endl;
s1.erase(7,3);
cout << s1 << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
*/
/*
string字串:从字符中获取想要的子串
函数原型:
string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串
*/
/*
#include<iostream>
#include<string>
using namespace std;
void test01()
{
string s1="abcdefgh";
string substr=s1.substr(1,3);
cout << substr <<endl;
}
void test02()
{
string email="zhangsan@sina.com";
//从邮件地址中获取 用户名信息
int pos =email.find("@");
string username=email.substr(0,pos);
cout << username<<endl;
}
int main()
{
// test01();
test02();
system("pause");
return 0;
}
*/