ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[C++][题解]切蛋糕

2022-01-19 12:34:18  阅读:210  来源: 互联网

标签:子串 string idx 题解 cin C++ substr 蛋糕 字符串


题目

题目描述

如果字符串中存在子串"cake"(小写字母),则称此串为蛋糕串。

给出n个字符串,如果所给的串为蛋糕串,则将蛋糕切除(即将"cake"删除)。将所有蛋糕串的剩余部分依次合并在一起,连成一个字符串并输出。

输入格式

第一行为一个正整数n(n ≤ 10000)。

接下来n行,每行为一个字符串(字符串长度≤10000)。字符串中可能包含空格。

输出格式

按要求输出一行字符串。

题解

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
    int n;
    string res(""),t;
    scanf("%d",&n);getchar();
    for(int i = 0;i < n;i++){
		getline(cin,t);
        auto idx = t.find("cake"); // 使用find函数查找"cake"
        if(idx == string::npos) continue;
        while(idx != string::npos){
            t = t.substr(0,idx) + t.substr(idx + 4);
            idx = t.find("cake");
        }
        res += t; 
    }
    printf("%s",res.c_str());
    return 0;
}

第十行

getline(cin,t);

这一行将一行的数据读入到字符串t。
注:为什么不使用cin >> t;而使用了getline呢?
因为cin在遇到空格时会停止读入,使用cin无法读取到具有空格的一行字符串,所以是用了getline
使用方法为:

getline(cin,字符串对象);

第十一行

auto idx = t.find("cake");

find函数可用于查找子串,如果找到,返回匹配位置的首个元素的下标。
如果没找到,则返回string::npos(它是一个很大的数)。

auto用于自动识别数据类型,在某些时候可以偷懒用。
详细请看:c++ auto关键字使用

第十四行

t = t.substr(0,idx) + t.substr(idx + 4);

substr函数用于截取子字符串。
它有两种形式,一种是

substr(子串的首元素下标,子串的长度);
substr(子串的首元素下标); // 会将当前位置到末尾的子串截取出来

substr函数会将截取到的子串以函数返回值的形式返回出来。

使用+号可以拼接两个字符串。
例如:

string a = "hello ",b = "world!";
string c = a + b;

那么c的值将为hello world!

综上所述,第14行便实现了从字符串t中截取出两个子串,并将子串合并后复制给t的操作。


原创不易,感谢支持。

标签:子串,string,idx,题解,cin,C++,substr,蛋糕,字符串
来源: https://blog.csdn.net/qq_35630119/article/details/122577723

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有