初入c++(四)string类和c++中的引用

1.string类

 a.包含头文件 <string>
  
  string s1;  定义的时候没有初始化,默认是空;
  string s2 = "c  plus";   定义并初始化 c plus ,没有\0;
  string s3 = s2;    定义s3,并把s2赋值给s3;
  string  s4  (3, 's'); 初始化为3个s;
  
  string 输入时,cin是遇到空格默认结束;
  
  string成员可以用下标访问;从0开始;
  
  b.  string 中字符串可以使用+, +=进行字符串的拼接;
  
  c. string插入操作,insert
  原型:  string& insert(size_t pos, const string &str)
  
  d.string删除操作:erase
  原型:string& erase(size_t pos = 0, size_t length)
  s2.erase(5);把s2第5个元素后面的内容全部删除;
  s3.erase(5, 3);s3中第5个后面3个元素删除
  
  e .string中substr
  string substr (size_t pos = 0, size_t len = npos) const;
  pos 为要提取的子字符串的起始下标,len 为要提取的子字符串的长度。
  
  s2 = s1.substr(3, 10);从第3个开始提取10给s2;
  
  f。string查找find查找出现的位置:
  其中的两种原型为:
    size_t find (const string& str, size_t pos = 0) const;
    size_t find (const char* s, size_t pos = 0) const;

补充:转换为C风格的字符串
虽然 C++ 提供了 string 类来替代C语言中的字符串,但是在实际编程中,有时候必须要使用C风格的字符串(例如打开文件时的路径),为此,string 类为我们提供了一个转换函数 c_str(),该函数能够将 string 字符串转换为C风格的字符串,并返回该字符串的 const 指针(const char*)。请看下面的代码:
string path = "D:\\demo.txt";
FILE *fp = fopen(path.c_str(), "rt");
为了使用C语言中的 fopen() 函数打开文件,必须将 string 字符串转换为C风格的字符串.

2.c++中的引用。

引用是变量的一个别名,通过这个别名和原来的名字都可以找到这份数据。一个人的名字和绰号,表示同一个人。

1。引用和变量
<类型>  &name =  data;

引用必须在定义的时候同时初始化,后面不能再引用其他数据,类似于const


#include <iostream>
using namespace std;

int main()
{
    int a = 99;
    int &b = a;
    
    cout<<a<<","<<b<<endl;
    cout<<&a<<","<<&b<<endl;
    return 0;
}


引用在定义的时候加&,使用的时候不用,加&表示地址。
不希望引用修改数据,就在前面加const

const <类型>  &name =  data;或
<类型> const  &name =  data;
就是用const保护数据。

2。引用作为函数参数
用引用作为形参,调用时形参和实参就绑定在一起,指向同一份数据,如同C中的地址传递。
修改形参,实参也改变,不会出现C中数值传递的时候实参不改变。
#include <iostream>
using namespace std;

void swap1(int a, int b);
void swap2(int *a, int *b);
void swap3(int &a, int &b);

int main()
{
	int n1, n2;
	cin>>n1>>n2;
	swap1(n1, n2);
	cout<<n1<<" "<<n2<<endl;
	
	cin>>n1>>n2;
	swap2(&n1, &n2);
	cout<<n1<<" "<<n2<<endl;
	
	cin>>n1>>n2;
	swap3(n1, n2);
	cout<<n1<<" "<<n2<<endl;
	
	return 0;
}

void swap1(int a, int b)      //直接传递参数内容

{
	int temp = a;
	a = b;
	b = temp;
	cout<<a<<" "<<b<<endl;
}

void swap2(int *a, int *b)   //传递指针
{
	int temp = *a;
	*a = *b;
	*b =temp;
	cout<<*a<<" "<<*b<<endl;
}

void swap3(int &a, int &b)  //按引用传参  a,b分别绑定num1,num2了
{
	int temp = a;
	a = b;
	b = temp;
	cout<<a<<" "<<b<<endl;
}

3。引用作为函数返回值
#include <iostream>
using namespace std;

int &sum(int &num)
{
    num = num +1;
    return num;
}

int main()
{
    int n = 20;
    int m = sum(n);
    cout<<m<<endl;
    return  0;
}
注意:不能返回局部变量的引用;

4。引用的本质,和指针的区别
引用只是对指针进行了封装,底层还是通过指针实现的。

4.1 引用必须在定义时初始化,从一而终,不能指向其他数据;
指针没这个限制,不一定赋值,也能指向任意数据。

4.2 可以有const指针,但是没有const引用; 
int a = 20;
int & const r = a; error

const int *const ptr ;
多此一举

3. 指针可以有多级:int **p;但引用int &&p是错误的;
可以如下:
int a = 10;
int &r = a;
int &rr = r;

4. 指针和引用的自增++,自减--表示不一样。
  指针表示指向的地址发生改变,指向下一个单元;
  引用表示指向的值改变;
  char a='c' ; --- &a = 0x10000000;
  char *ptr=&a;
  ptr++;
  ptr--;
  0x100000000;
  
  int a = 3;
  int &b= a;
  b++;
  b--;
 




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值