c++考点之string的函数



新版的教材,这块涉及的不多,但从2020年8月真题来看,还真有可能会考到,所以还是得把这里当作一个正儿八经的考点来对待。这块其实也是经常用的。

c_str()函数???

c_str()是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。换种说法,c_str()函数返回一个指向正规C字符串的指针常量,内容与本string串相同。这是为了与C语言兼容,在C语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成C中的字符串样式。

c_str()的原型是:const charc_str() const; //c_str()生成一个const char指针,指向以空字符终止的数组。

典型应用场景:

将c++中的字符串转成C char 数组:
char c[20];
string s=“1234”;
strcpy(c,s.c_str());//不能用c=s.c_str形式,因为c_str()返回是一个const指针不能赋予一个char类型。

一个函数要求char*参数
string s = “Hello World!”;
printf("%s", s.c_str()); //输出 “Hello World!”

string的find()函数??

用于找出字母在字符串中的位置

通用原型为:find(str,position)//
str:是要找的元素
position:字符串中的某个位置,表示从从这个位置开始的字符串中找指定元素

g++中的原型为:

返回值为目标字符的在字符串中的位置,当没有找到目标字符时返回npos(c++中特定的标志,不同电脑打印出来的值可能不一样,我的电脑是18446744073709551615)如:position = s.find(“jk”);if (position != s.npos)

典型应用场景:

找目标字符的位置:

string s = “hello world!”;
cout << s.find(“e”) << endl;

指定查找位置

string s = “hello world!”;
cout << s.find(“l”,5) << endl;//从字符串s 下标5开始(也就是空格开始),查找字符串l ,返回l 在s 中的下标 ,打印为9

扩展:

与之对应的rfind//查找在字符串中最后出现的位置,如:
//反向查找,flag 在s 中最后出现的位置

string s="132124435"
flag="3";  
position=s.rfind (flag);  
cout<<"s.rfind (flag) :"<<position<<endl;  

insert函数???

basic_string& insert (size_type pos, const basic_string& str);//在原串下标为pos位置(开始)插入字符串str ,这个比较常用

basic_string& insert (size_type pos, const basic_string& str, size_type pos1, size_type n);//str从下标为pos1开始数的n个字符插在原串下标为pos的字符前

basic_string& insert (size_type pos, size_type n, char c);//在原串下标为pos的字符前插入n个字符c

如:

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    string str("All that exists is what's ahead.");
    string a, b;
    a = str.insert(4,"sky");//在下标为4的位置,插入字符串sky
    cout << a << endl; //输出All skythat exists is what's ahead.
 
    str = "All that exists is what's ahead.";
    b = str.insert(4,5,'x'); //在下标为4的位置,插入字符串5个字符x
    cout << b << endl; //输出 All xxxxxthat exists is what's ahead.
    return 0;
}

substr()函数??

刚开始还以为是要减去,实际是截取字符串,本质和减去差不多。

原型:

s . substr(pos, n) //返回一个string,pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s
pos:从pos位置开始截取
n:截取的字符的个数。

应用场景:就是截取

string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"

异常情况:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

append()函数???

原型:

s.append(s1); //向s字符串尾部添加s1字符串。添加后,s改变了。

应用场景:

添加另一个字符串的某一段子串:s.append(s1, pos, n);//添加s1字符串中,从pos起的n个字符。

添加几个相同的字符(这个常用)s.append(n,’.’);//添加n个点,可以构成省略号。点也可以是其实相同的字符,如‘=’

swap()函数?

原型

void swap( basic_string &str);

应用场景

swap()函数把str和本字符串交换。

    string first( "this comes first" );
    string second( "and this is second" );
    first.swap( second );
    cout << first << endl;
    cout << second << endl;//输出的是 and this is second 
                          //this comes first
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值