C++基础补充(二)

###蓝桥杯选用c++11版本

1.正则表达式

int main(){
    char s[15];
    scanf("%[^\n]",s); //^排除的意思只要不是\n就一直读入
                       //[]是一个正则表达式
    printf("%s",s);
return 0;
}

2.取消同步流

由于cin和cout需要自动判断变量类型等内部原因,读写效率比scanf和printf低

当数据量较大时,可能导致程序运行超时

可以通过取消同步流来加速cin和cout,加速后效率相差无几

int main(){
    //取消同步流
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //其他操作不变
    int x;
    cin>>x;
    cout<<x<<"\n";
    return 0;
}

 ###scanf,printf和cin,cout不要混用

3.string简介

  • string是C++标准库的重要组成部分,主要用于字符串处理。
  • 使用string库需要在头文件中包括该库#include<string>
  • string与char[ ]不同,string实现了高度的封装,可以很方便地完成各种字符串的操作,比如拼接、截取、匹配等等。
  1. 字符串管理:string封装了字符串的存储和管理。它自动处理字符串的内存分配和释放,避免了手动管理内存的麻烦。
  2. 动态大小调整:string可以根据需要自动调整字符串的大小。在添加或删除字符时,string会自动调整内部的存储容量,确保足够的空间来容纳字符串。
  3. 安全性:string提供了一些方法来确保字符串的安全性。例如,它提供了越界访问检查,以避免访问超出字符串范围的字符。
  4. 迭代器支持:string支持迭代器,可以使用迭代器遍历字符串中的字符,进行字符级别的操作。
  5. 兼容性:string是C++标准库的一部分,因此在C++中广泛使用,并且与其他标准库组件和c++语言特性兼容。

4.各种基本操作

  • 在c++中,std::string类提供了一个成员函数c_str(),用于返回一个指向以空字符结尾的c风格的字符串(即const char*类型);在进行printf输出时,需要将string转换为c风格的字符串进行输出
#include<bits/stdc++.h>
using namespace std;
int main(){
    ios::syn_with_stdio(0),cin.tie(0),cout.tie(0);
    char buf[100];//临时变量,用于输入
    scanf("%s",buf);//输入buf
    string str(buf);//用buf来构造str
    printf("str = %s\n",str.c_str());//输出str
    return 0;
}

  1.  获取字符串长度str.length(); //在使用时前面最好做一个强制类型转换
  2. 拼接字符串results1=str1+","+str2; //使用加法字符串;results2=str1.append(",").append(str2); //使用append()函数
  3. 字符串查找str.find("World");
  4. 字符串替换str.replace(7,5,"Universe");
  5. 提取子字符串str.substr(7,5);
  6. 字符串比较str1.compare(str2); //等于0一样,大于0 str1>str2,小于0 str1<str2
  •  ### string重载了不等号,所以可以直接使用str1<str2的方式来比较string的大小,比较规则是按照字典序大小进行比较(字典序的比较方法是从小到大一个一个比较,一旦遇到不相等的字符就确定大小关系)

5.常用的遍历string的方法有两种:

  1. 循环枚举下标

  2. auto枚举(其中&表示取引用类型,如果对i修改将会改变原来的值)
string s="Hello";
for(int i= 0;i<s.length();++i)
    cout<<s[i];
cout<<"\n";
for(auto i:s){
    cout <<i;
    i='a';//此处的修改无效,因为这个i是拷贝出来的,而不是引用s的
}
cout <<"\n";
//此时s="Hello"
for(auto &i:s){
    cout<<i;
    i ='a';//此处修改会改变s的字符值
}
cout<<"\n";
//此时s="aaaaa"
cout<<s<<"\n";

翻转字符串中的字符
#include<bits/stdc++.h>
using namespacce std;
int main(){
    string a;
    for(int i=(int)s.length()-1;i>=0;--i){
        cout<<s[i];
    }
    return 0;
}
翻转输出:
#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    getline(cin,s);
    reverse(s.begin(),s.end());
    cout<<s<<"\n";
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值