C++ 部分函数

string库

1、size()与length()

字符串长,结果相同

string s;

s.length(); //s.length()-1是最后一个字符的下标,而不是''

for(i=0;i<s.length()-1;i++)
    cout<<s[i]<<endl; //可以输出每个字符

s.size();

 

2、find(char ch)

用于string类型

在字符串中找字符ch,没找到返回-1,找到则返回下标;也可以查找一个子串,返回子串(首字符)的下标

string s;

if(s.find('a')==-1)

  return false;

没在s中找到字符'a'的话,返回false。

 

从指定位置处查找

string s;
cin>>s;
if(s.find('a',5)!=-1)//从下标为5处(包含s[5])开始查找
    return true;

 

如果s中有多个相同字符,而要分别输出它们的位置

string s;
cin>>s;
int pos=0;//记录位置

while((pos=s.find('a',pos))!=-1)
    cout<<"position"<<pos++<<";";//每次要从上一个位置之后开始查找,不然就会一直输出之前的位置,所以pos++表明从之后开始查找

C++ 部分函数

 

 

 

 

参考:https://www.cnblogs.com/wkfvawl/p/9429128.html

 

 

3、统计字符串长度

strlen(ch):不包含末尾的0;

另外也可用递归的方式不用strlen统计字符串长度

//用递归求字符串长度,字符串都以''结尾
int strlen1(char * ch){
    if(*ch!='')return strlen1(ch+1)+1;
    else return 0

 

4、提取子串

string s="abcdef"

cout<<s.substr(pos,len)

从指定位置(下标)pos开始,长度为len的子串;

如果没有len或者len长度超过了字符串长,会一直延续到结尾;

如果pos和len都没有,则默认复制整串

PS:第二个参数是子串长度,而不是结束位置!

 

5、字符串比大小

strcmp(str1,str2)

str1与str2必须是char *或者char []而不能是string类型

根据每个字符的ASC码依次比较str1与str2中的每个字符,直到第一个不相同的字符或者其中一个字符串到尾''

<0  str1小于str2

=0 相等

>0 str1大于str2

 

string类型的字符串比大小,用string的成员函数compare()

string s1,s2;

s1.compare(s2);

<0 s1<s2

=0 s1=s2

>0 s1>s2

 

6、字符串复制

strcpy(a,b) 将b复制到a中

 

algorithm库

7、sort排序,可以按照先后条件进行排序

sort(start,end,cmp)

start为开始的地址,如果不是指针类型的要用引用符号'&'得到地址

end为最后一个地址,即如果是A[8]数组,end应该是A[8]而不是A[7],所以此处的end是终结地址

cmp为排序方式,默认升序

经常自己定义第三个参数即cmp函数,以达到需要的目的,cmp函数返回一个布尔值,其中必须包含逻辑表达式(即比大小的方式)

举个例子:

class Student {
public:
    char name[100];
    int age;
    float grade;
};
bool cmp(Student S1, Student S2) {
//小于号 表示用从小到大的方式排序
    if (S1.grade != S2.grade) return S1.grade<S2.grade;
    else if (strcmp(S1.name, S2.name) != 0) return strcmp(S1.name, S2.name)<0;
    else return S1.age<S2.age;
}
int main() {

    int i = 0;
  //输入N个Student对象的值
    int N;
    cin >> N;
    Student *S = new Student[N];
    for (i = 0; i<N; i++)
        cin >> S[i].name >> S[i].age >> S[i].grade;
sort(
&S[0], &S[N], cmp); for (i = 0; i<N; i++) cout << S[i].name << ' ' << S[i].age << ' ' << S[i].grade << endl; delete[] S; }

上述函数就是分别按照grade,name,age的大小关系进行排序,当grade相同时,按name的ascii码大小排序,name也想通就按照年龄从小到大排序

 参考:https://www.cnblogs.com/epep/p/10959627.html

 

8、erase函数,用于一个string或者迭代器类型(iterator)的对象

用法:3种

erase(int pos,n):抹去pos位置(int类型)处n个元素

erase(iterator pos):抹去pos位置(迭代器类型)处一个元素

erase(iterator start,iterator end):抹去从start到end处的元素,这里的start与end都以迭代器的形式表现

 

由于string类型也是一种容器,可以构建迭代器,所以这里统一用string来举例

#include<string>
#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
    string S("This is an example");

    string::iterator it;

    S.erase(9, 1);
    cout << S << endl; //输出 This is a example

    it = S.begin();

    S.erase(it + 10);
    cout << S << endl; //输出 This is a xample

    S.erase(it, it + 4);
    cout << S << endl; //is a xample


    system("pause");

    return 0;
}

 

erase与find函数配合,可以达到删除一个字符串中特定字符的目的:https://www.cnblogs.com/LesBlog/p/12569652.html

参考:https://blog.csdn.net/weixin_41969587/article/details/82587372

 

9、字符串颠倒

三种方法:

1、

cin>>s;
int i=0;
string res("");
for(i=s.length()-1;i>=0;i--)
    res+=s[i];
cout<<res<<endl;

2、strrev()函数 

string库,用于char[]数组

int main(){
   char c[]="abcde";
   strrev(c);
   cout<<c<<endl;
   return 0;  
}
//结果 edcba

3、algorithm库的reverse()函数,用于string类型

reverse()函数不只可以用于字符串颠倒,还可以用于vector容器类型的颠倒

int main(){
  string S("abcdef");
  reverse(S.begin(),S.end());
  cout<<S<<endl;
  //结果 fedcba
}

参考:https://www.cnblogs.com/bk76120/p/10556037.html

原文链接: https://www.cnblogs.com/ShineLeBlog/p/12507994.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ 部分函数

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/335648

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午10:15
下一篇 2023年3月1日 下午10:15

相关推荐