字符串存储、输入与输出(学习c++的笔记)

目录

一.字符串的存放

1.用字符数组存放字符串

2.用字符串指针管理字符串(最常用的形式,本质还是字符数组)

3.用string类型存放字符串(有个成员是字符指针,这个指针指向一段内存空间存放字符串常量)

二.字符串的输入

1.方法一:用cin整体输入字符串

2.方法二:用cin.getline整体输入字符串,遇到回车和指定字符时,或者是指针指定的字符个数满了以后结束

3.方法三:用getline整体为string输入字符串,碰到回车时结束,getline函数需要有两到三个参数

三.字符串的输出


一.字符串的存放

1.用字符数组存放字符串

用串常量初始化 

char str2[10]={"student"};
char str3[]={"student"};
char str4[]="student";

首先给数组分配存储空间,末尾有\0,没有内容的地方也用\0填充

2.用字符串指针管理字符串(最常用的形式,本质还是字符数组)

const char *string1="stident";

相当于定义了一个指针string1,这个指针指向字符串常量,因为是常量,所以不能随便用*string1对字符串进行写操作

更常用的代码是这样的

char *string2=new char[10];//首先开辟10个字节的存储空间,定义的指针变量string2指向这个空间
strcpy(string2,"student");//对应空间上放置字符串常量所对应的内容

string2指针指向一个动态开辟出来的空间,用函数strcpy给string2指向的空间中放置student(因为用到函数strcpy,开头要#include<cstring>)

3.用string类型存放字符串(有个成员是字符指针,这个指针指向一段内存空间存放字符串常量)

string cstr="student";//定义string类型变量,给这个变量赋初值,初值是一个字符串常量
string cstr1;cstr1="student";//这是另一种赋值形式

string实际上是在字符数组的基础上封装出来的一个对字符串进行操作的一个类型,使用的时候要包含头文件#include<string>

二.字符串的输入

1.方法一:用cin整体输入字符串

char name[20];
cin>>name;//输入字符串,把字符串放到开辟的空间中

这种方式输入的话遇到空格或者回车就结束了,所以不能用于输入时带空格或者回车的字符串

指针形式如下

char *pname=new char[20];
cin>>pname;

用string类型的代码实现如下

string strName;
cin>>strName;

2.方法二:用cin.getline整体输入字符串,遇到回车和指定字符时,或者是指针指定的字符个数满了以后结束

这个方法相较上一个方法可以输入空格了

char name[20];
cin.getline(name,20);

比如说输入一个名字Mary Bob,字符数组中依次存放的字符就是'M' 'a' 'r' 'y' ' ' 'B' 'o' 'b' '\0'

char *pname=new char[20];
cin.getline(pname,20,'-');//意思是输入pname,开辟的内存空间是20,在碰到减号时结束输入

比如说输入Bob-hellow,实际上就只是输入了Bob

但是用string类型定义的一般不用cin.getline

3.方法三:用getline整体为string输入字符串,碰到回车时结束,getline函数需要有两到三个参数

string strName;
getline (cin,strName)//第一个参数是标准输入类型(键盘),第二个参数是要存放的字符串变量

第一个参数是标准输入类型,第二个参数是要存放的字符串变量,第三个参数是结束标识(可有可无)

#要特别注意的是,当cin.getline和cin同时使用时,cin.getline会读入cin最后的结束标识\n,认为\n对cin.getline来说是有效输入,就跳过了其本身的输入。因此就要在cin后面加cin.get()来清除\n的影响

例如

for(int i=0;i<3;i++)
{
      cout<<i<<"name:";
      cin.getline(allone[i].name,10);
      cout<<"id:";
      cin>>allone[i].id;
        cin get();//清除\n的影响
}
for(int i=0;i<3;i++)
{
      cout<<allone[i].name<<'\t'<<<allone[i].id<<endl;
}

三.字符串的输出

比较特殊的是指针类型的

char *pname=new char[20];
cin>>pname;//输入Mray Bob,实际上pname指向的字符空间中只有Mary(空格回车结束输入)
cout<<pname<<endl;//pname是一个地址,从这个地址开始存放的字符会依次输出,碰到空就会结束输出。因此输出的不是一个地址,而是这个地址指向的一个字符串,因此输出Mary
cout<<*pname<<endl;//实际上是pname做了一次间接引用,输出的是目标对象,而其目标对象就是一个char类型的字符,所以只会输出一个M

字符数组名,字符指针都表示字符串

输出字符指针就是输出字符数组名、字符指针标识的地址存放字符,碰到\0输出结束(整个字符串)

输出字符指针的间接引用是输出单个字符

主要注意的是输出的是字符指针还是字符指针的间接引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值