第三篇博客——字符串

字符串

字符串是一个我大一大二就没学好的知识点,现在要补回来,有的知识点还不是特别清楚,比如操作啥的,后续要增添操作。

字符串的基本知识

构造函数

字符串有几种常见的构造函数,包括默认构造函数和复制构造函数。

  1. 默认构造函数
    string str;

  2. 一般构造方法
    string str("abc")
    和拷贝构造string str(str1).

除此之外还有一些不常见但是可能会很有用的版本.

  1. 将构造的对象初始化为s的前n个字符,s不够n个时将相邻的内存单元的内容当作s的一部分继续复制:

    string(const char *s, size_type n, const Allocator &a = Allocator());
    string ett("Telephone home.", 4)
    (std::string &) "Tele" 
  2. 将构造的对象初始化为s的后n个字符,也就是从s指向的内存的第n个字节开始复制:

    string(const string &str, size_type pos,size_type n = npos, const Allocator &a = Allocator());
    root [15] string att("Telephone home.")
    (std::string &) "Telephone home."
    root [16] string et(att, 4)
    (std::string &) "phone home."
  3. 创建一个n个字符的string对象:

    string(size_type n, char c, const Allocator &a = Allocator())
    root [6] string(10, 'a')
    (std::string) "aaaaaaaaaa"

可以看出3和4构造函数的主要区别在于是用字符串常量还是string对象做第一个参数。

另一个区别是,4中的第三个参数是要复制的字符个数,和2的第二个从参数不同的是,如果npos过大的话,它会在复制完str后停止:

root [0] string att("Telephone home.")
(std::string &) "Telephone home."
root [4] string (att, 4, 100)
(std::string) "phone home."

root [5] string ("Telephone home.", 4, 5)
(std::string) "phone"
root [1] string ("Telephone home.", 4, 100)
(std::string) "phone home."

上述代码中因为第三个参数是int,所以所有的构造函数都自动和2匹配,并且将字符串常量初始化为临时string对象。

其余常用函数

int found=str.find("abx");

在字符串中找到特定字符的函数是find(),若找到就返回对应的下标,若找不到就返回string::npos。

string substr=str.substr(3,5);

找到从3下标处开始5个字符组成的字符串。

几个清除函数

  1. string & erase (size_t pos =0,size_len=npos)
    参数1是起始位置,默认是0,参数2是长度
  2. interator erase(const_interator position)
    参数1是迭代器,返回值是下一个元素的迭代器
  3. interator erase(const_interator position1,const_interator position2)
    删除区间是开区间[position1,position2],返回值是被删除后一个字符的迭代器。

字符串处理

特殊乘法

在特殊乘法中,需要将输入的长数字当作字符串来处理,用str[i]-'0'来表示某位上的数字

//写个算法,对2个小于1000000000的输入,求结果。 特殊乘法举例:123 * //45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5(THU)
//这题应该用字符串处理
#include <iostream>
#include<cstdio>
#include <string>
using namespace std;

int main(){
    string a,b;
    while(cin>>a>>b){
        int answer=0;
        for(int i=0;i<a.size();i++){
            for(int j=0;j<b.size();j++){
                answer+=(a[i]-'0')*(b[j]-'0');
            }
        }
        cout<<answer<<endl;
    }
    return 0;
}

密码类题目

⚠️一个小tips:在遇到输入是一整行字符串的时候,如果用 while(cin>>str)
遇到空格就会停止输入,这样就会与题目要求的不会符合,所以应该用
while(getline(cin,str))
关于循环平移的问题,可以使用对字母进行减法操作后,再对字母个数26取模,就可以得到凯撒密码
str[i]=(str[i]-'A'-5+26)%26+'A';

统计字符

⚠️初始化数组的技巧:
memset(num, 0, sizeof(num));

//统计一个给定字符串中指定的字符出现的次数。
# include<iostream>
# include<cstring>
#include<string>
#include<cstdio>
using namespace std;
int num[128];
// 标准ASCII码字符集总共的编码有128个,
// 包括32个通用控制符,10个十进制数码,
// 52个英文大小写字母和34个专用符号.
int main(){
    string str1,str2;
    while(getline(cin, str1)){
        if(str1 =="#")
            break;
        getline(cin,str2);

//         内存操作函数
//         memset(num,0,sizeof num);
//         将以num为起始地址的数组全部初始化为0

        memset(num, 0, sizeof(num));
        for(int i=0;i<str2.size();i++)
            num[str2[i]]++;//统计所有字符数量
        for(int i=0;i<str1.size();i++)
            cout<<str1[i]<<" "<<num[str1[i]]<<endl;
            //只输出需要的
    }
    return 0;
}

上面这题是需要统计特殊字符,比如空格啥的。但是如果只是统计字母,那么就只需要准备26个int大小的数组,对应arr[c-'A']即可。

字符串匹配

图片说明

全部评论

相关推荐

避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务