C++-----对string库的一些思考

String库

c++专门定义了一个string类型,专门来处理字符串,来弥补字符数组对字符串操作的不便。用string类型声明的字符串,具有c++中流的特性。我具体使用两道题来分析,做题中遇到需要string处理以及它包括的很实用的函数。
1.string声明的字符串可以通过下标来访问

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s = "abcd";
//int len = (int)s.length();
int len = (int)s.size();
for(int i = 0;i<len;i++){
    printf("%d ",s[i]);
}
return 0;
}

我声明了一个string字符串“abcd”,通过下标访问的方式来打印每个字母对应ASCLL码值。其中s.size()和s.length()都是用来获取字符串的长度,至于我为什么要将其长度强转为int型,即int len = (int)s.size();,因为size()返回的是字符串所占的字节数,并不是我们直接想要的字符串长度(整型),所以编译的时候会有warning但不会对程序的结果本身造成影响。但最好还是这样写int len = (int)s.size()。
2。如果要读入和输出string类型的字符串,最好用cin和cout

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s;
while(cin>>s){
    cout<<s<<endl;
}
return 0;
}

3.string类型字符串非常方便的操作
1.string类型字符串的连接,如果要连接字符串s1和字符串s2,直接输出s3 = s1+s2;s3就是两个字符串连接后的字符串。直接摆脱了strcat,十分方便。

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s1;
string s2;
string s3;
while(cin>>s1>>s2){
    s3=s1+s2;
    cout<<s3<<endl;
}
return 0;
}

2.string类型字符串的比较,是可以直接使用==,!=,<,<=,>,>=来比较大小的,是按照字典序进行比较的,这是非常好用的,直接简化了用字符数组时,还使用strcmp的尴尬。

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s1;
string s2;
while(cin>>s1>>s2){
    if(s1==s2){
        printf("OK\n");
    }else{
      printf("NO\n");
    }
}
return 0;
}

在这里插入图片描述
string库中有很多很有用的函数,这里重点介绍一下substr()函数,因为我做题的时候经常用到它。substr(),即substr(pos,len)返回从pos号位开始,长度为len的字串,具体用法如下:

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
string s1;
int n;
while(cin>>s1>>n){
    cout<<s1.substr(0,n)<<endl;
}
return 0;
}

这里我输入字符串和一个整型n,程序帮我打印字符串从0到n的字串
在这里插入图片描述
接下来,这道题很好地展现了,substr的简便
在这里插入图片描述
我本题的思路是使用substr不断从s1下标0开始返回与s2等长度的字符串,来让他们进行比较,如果匹配得上就是亲和串,如果匹配不上则不是。这里值得注意的是,对于AABCD和CDAA这种情况,当我们的程序到B字母的下标时,要想返回四个字母,剩下的三个字母肯定不够,我们要继续从下标0开始凑够四个字母,这样就完成了本题:

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,s1;
while(cin>>s>>s1){
    //获取长度
    int len = (int)s.size();
    int len1 = (int)s1.size();
    //判断标志
    bool flag = false;
    for(int i = 0;i<len;i++){
        //以AABCD为例,这步操作到意思是当我们操作到B时,字母的数目不够了就开始从头(第一个字母)来借字母来凑齐
        if((i+len1)-1>len1){
             if(s1==s.substr(i,len1)+s.substr(0,i-1)){
                flag = true;
             }
        }
        if(s1==s.substr(i,len1)){
            flag = true;
        }
    }

   if(flag){
     printf("yes\n");
   }else{
      printf("no\n");
   }
}
return 0;
}

对于substr的应用,如果你还没看够,可以跳转到我的另一个题解蓝桥杯日期识别
关于C++STL中string库有很多东西可以说,今天重点介绍了substr这个函数,后期会继续更新很实用的方法和思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值