想学编程?C++字符串与C字符串转换及大小容量函数看这里

网安智编 厦门萤点网络科技 2026-01-23 00:10 41 0
想学编程,关注小编就对了。 .1 C++字符串和C字符串的转换 C ++提供的由C++字符串得到对应的的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加'/0'...

想学编程,关注小编就对了。

.1 C++字符串和C字符串的转换

C ++提供的由C++字符串得到对应的的方法是使用data()、c_str()和copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加'/0'。c_str()返回一个以‘/0'结尾的字符数组,而copy()则把字符串的内容复制或写入既有的或 字符数组内。C++字符串并不以'/0'结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用。由于只是简单介绍,详细介绍掠过,谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。

2.2 大小和容量函数

一个C++字符串存在三种大小:a)现有的字符数,函数是size()和(),他们等效。Empty()用来检查字符串是否为空。b)() 这个大小是指当前C++字符串最多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出异常c)()重新分配内存之前 所能包含的最大字符数。这里另一个需要指出的是()函数,这个函数为重新分配内存。重新分配的大小由其参数决定, 默认参数为0,这时候会对进行非强制性缩减。

还有必要再重复一下C++字符串和C字符串转换的问 题,许多人会遇到这样的问题,自己做的程序要调用别人的函数、类什么的(比如数据库连接函数(char*,char*)),但别人的函数参 数用的是char*形式的,而我们知道,c_str()、data()返回的字符数组由该字符串拥有,所以是一种const char*,要想作为上面提及的函数的参数,还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么,这时候我们的处理方式是:如果 此函数对参数(也就是char*)的内容不修改的话,我们可以这样((char*).c_str(), (char*).c_str()),但是这时候是存在危险的,因为这样转换后的字符串其实是可以修改的(有兴趣地可以自己试一试),所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个char*上去。当然,更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈祷现在仍然使用C字符串进行编程的高手们(说他们是高手一点儿也不为过,也许在我们还穿开裆裤的时候他们就开始编程了,哈哈…)写的函数都比较规范,那样我们就不必进行强制转换了。

2.3元素存取

我们可以使用下标操作符和函数at()对元素包含的字符进行访问。但是应该注意的是操作符并不检查索引是否有效(有效索引0~str.()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用 at()的时候索引无效,会抛出异常。

有一个例外不得不说,const a;的操作符对索引值是a.()仍然有效,其返回值是'/0'。其他的各种情况,a.()索引都是无效的。举例如下:

const Cstr(“const ”);

Str(“”);

Str;//ok

Str.at(3); //ok

Str; //未定义的行为

Str.at(100); //throw

Str

Str.()

//未定义行为

Cstr

Cstr.()

//返回 ‘/0'

Str.at(Str.());//throw

Cstr.at(Cstr.()) ////throw

我不赞成类似于下面的引用或指针赋值:

char& r=s;

char* p= &s;

因为一旦发生重新分配,r,p立即失效。避免的方法就是不使用。

2.4比较函数

C++字符串大小和容量函数详解_string函数_C++字符串转换c_string方法

C ++字符串支持常见的比较操作符(>,>=,,>=,

另一个功能强大的比较函数是成员函数()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等 〉0-大于

s(“abcd”);

pare(“abcd”); //返回0

pare(“dcba”); //返回一个小于0的值

pare(“ab”); //返回大于0的值

pare(s); //相等

pare(0,2,s,2,2); //用”ab”和”cd”进行比较 小于零

pare(1,2,”bcx”,2); //用”bc”和”bc”比较。

怎么样?功能够全的吧!什么?还不能满足你的胃口?好吧,那等着,后面有更个性化的比较算法。先给个提示,使用的是STL的比较算法。什么?对STL一窍不通?靠,你重修吧!

2.5 更改内容

这在字符串的操作中占了很大一部分。

首先讲赋值,第一个赋值方法当然是使用操作符=,新值可以是(如:s=ns) 、(如:s=”gaint”)甚至单一字符(如:s='j')。还可以使用成员函数(),这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧:

s.(str); //不说

s.(str,1,3);//如果str是”” 就是把”ama”赋给字符串

s.(str,2,::npos);//把字符串str从索引值2开始到结尾赋给s

s.(“gaint”); //不说

s.(“nico”,5);//把'n' ‘I' ‘c' ‘o' ‘/0'赋给字符串

s.(5,'x');//把五个x赋给字符串

把字符串清空的方法有三个:s=””;s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂!)。

提供了很多函数用于插入()、删除(erase)、替换()、增加字符。

先说增加字符(这里说的增加是在尾巴上),函数有 +=、()、()。

举例如下:

s+=str;//加个字符串

s+=”my name is jiayp”;//加个C字符串

s+='a';//加个字符