第八章 字符串和向量

字符串的数组类型

char型

C++常用的是char型
‘\0’字符被称为空字符,作为结束标记使用,当程序从数组里读取到’\0’时,就知道要停止读取了,以’\0’为终止的字符串被称为C字符串
C字符串本质上是字符数组,储存的数据要比声明的少一,因为最后一位要放’\0’
C字符串声明时可以初始化,而且不需要填满它
C字符串声明时可以省略数组长度,但是有一点和正常的不一样

char a[] = {"asd"};

此时的数组长度为4,因为最后有’\0’
注意另一种声明方式

char a[4] = {"asd"};

这两者是等价的
注意不能这么声明

char a[4] = {"asdf"};

这样会系统会提示数组下标越界,因为没流出空间给’\0’
如果想要定义三个不要’\0’,可以这么定义

char a[] = {'a','s','d'};

srrncpy,strncat,strncmp这三个函数是C++< CString >提供的三个安全版本的函数
这三个函数都有三个参数

    //以下操作将字符串"vcxz"的前两个赋给了a,a最后变成了"vcd"
    char a[4] = {"asd"};
    strncpy(a,"vcxz",2);
    //以下操作将在a字符串后面添加一个'x'
    char a[40] = {"asd"};
    strncat(a,"x",1);
    //判断a和字符串"asd"的第一位是否相同,相同返回0
    //不同话,a大返回正值,a小返回负值
    char a[40] = {"ase"};
    int b = strncmp(a,"asd",1);

C字符串的输入和输出

    char a[100];
    char b[100];
    cout<<"请输入:"<<endl;
    cin>>a>>b;
    cout<<a<<b<<endl;

输入如下
输入如下
输出:

这里写图片描述
只读取了前面两个字符,因为cin读取时遇到空格自动结束

如果想要读取整行,需要用到getline函数,用法如下

    char a[100];
    cout<<"请输入:"<<endl;
    cin.getline(a,100);
    cout<<a<<endl;

这样就能读取一行了
这里写图片描述
如果把函数最后一个参数换成2,输出是
这里写图片描述
只读取了一个A,因为第二个要放’\0’

atoi,atol,atof
这三个函数都是将C字符串转化为对应的数值
atoi对应int
atol对应long
atof对应double

标准String类

string类需要加入预编译头#include < string>
操作符=可以为string变量赋值

string str;
str = "a"+"asd"+"weg";

这是合法的

string a = "asd";
string a("asd");

这两者初始化是等价的

String类的I/O

cin用法与char一致
getline略有差别,这里的getline不是成员函数,所以用法如下

string a;
getline(cin,a);

这里的getline在string库里定义的,cin也可以换成文件连接的流对象

用string类进行字符串处理

string类处除了char类行的处理外,还支持更多其他类型的操作
能够当数组使用,比如

string a = "asfasf";
cout<<a[4];

但是使用[]不会认为是非法的,可能出现有问题但是不报错的情况,比如超出数组长度之类的
所以推荐使用at函数,使用如下

string a = "asfasf";
cout<<a.at(4);

string对象和C字符串之间的转换

char a1[] = "asdfasf";
string a2;
a2 = a1; 

这是合法的
但是,以下不合法

a1 = a2;

将string对象转换成对应的C字符串要用到c_str函数

string a;
a.c_str();

向量

向量类似数组,但还是有很多差别
向量的声明,如

vector<int> v;

这是定义了一个名为v,类型是int的向量
和数组一样,向量的编号也是从0开始的,向量也可以使用[],但是这个只能赋值,不能初始化
向量的初始化需要使用push_back函数或者用类似数组的初始化,如下

vector<int> a;
a.push_back(0);
a.push_back(1);

//或者这样
vector<int> a = {1,2};

向量元素个数称为向量的长度
成员函数size()判断向量有多少个元素,该函数只会返回unsigned int类型,该类型没有负数
向量在任何时候都有一个容量,即当前分配了内存的元素个数
容量一定大于等于长度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值