一、String类的拷贝和拼接
① 使用string的函数:append<拼接>和assign<拷贝>
拷贝和拼接都可指定 位置和个数,代码如下:
#include <iostream>
#include <string.h>
using namespace std;
/*string类型拷贝assign和拼接append*/
int main()
{
string s1 = "Dante";
string s2 = "Vivan";
string s3;
cout<<"拼接从s2 0的位置开始的前"<<s2.size()<<"个字节"<<"到s2后面"<<endl;
s1.append(s2,0,s2.size());
cout<<"拼接之后 s1:"<<s1<<endl;
cout<<"从s1 0 的位置开始的前"<<s1.size()<<"个字节拷贝到s3"<<endl
s3.assign(s1,0,s1.size());
cout<<"拷贝之后s3:"<<s3<<endl;
return 0;
}
运行结果:
拼接从s2 0的位置开始的前5个字节到s2后面
拼接之后 s1:DanteVivan
从s1 0 的位置开始的前10个字节拷贝到s3
拷贝之后s3:DanteVivan
二、关于String类引索超出边界
已知字符串:
Sting first_novel("V");
则下标:
char ch = first_novel[1];,返回一个未定义的字符串,超出检索范围,
下标操作不提供范围检错,高质量的代码不希望出现这种错误。
则可使用string中的at函数,如果越界则返回out_of_range表示引索超出范围。
#include <iostream>
#include <string.h>
using namespace std;
/*测试string类型范围函数*/
int elem_count(const string &word,int index);
int elem_count(const string &word,int index)
{
char ch = word.at(index);
return 0;
}
int main()
{
string s1("he");
elem_count(s1,7);
return 0;
}
运行结果:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 7) >= this->size() (which is 2)
Aborted (core dumped)
引索越界导致段错误!