文章

61

粉丝

98

获赞

17

访问

16.6k

头像
字符串匹配 题解:用find()函数实现,AC只用33,求大佬康康。疑惑点在代码首行
P1378 北京航空航天大学机试题
发布于2024年3月20日 16:27
阅读数 176

//疑惑:会不会有重复输出匹配到的字符串的情况没有考虑进去,
//例如:”sdfacsdfbc“与字符串”sdf[ab]c”匹配,"sdfacsdfbc"会被输出两次
#include
using namespace std;

int main(){
    //输入
    int n;
    while(cin >> n){
        string ss[n];
        string ssl[n];      //将ss中的字符串转换成小写填入ssl中
        string ms;

        for(int i = 0; i < n; i++){
            cin >> ss[i];
            ssl[i] = ss[i];
            transform(ss[i].begin(), ss[i].end(), ssl[i].begin(), ::tolower);
        }
        cin>> ms;
        transform(ms.begin(), ms.end(), ms.begin(), ::tolower);     //将ms转换成小写


        //将模式串中括号分解,依次进行查询
        int l = ms.find('[');   //左括号的小标
        int r = ms.find(']');   //右括号的小标
        string pre = ms.substr(0,l);    //左括号前的字符串
        string post = ms.substr(r+1, ms.size() - r -1);     //右括号前的字符串
        int curnumber = l;      //用于指向括号中字符的小标

        while(++curnumber != r){    //循环遍历括号中的字符,并将其和pre、post、组合成cur
            string cur = pre + ms[curnumber] +post;
      ...
登录查看完整内容


登录后发布评论

2 条评论
snake
2024年3月20日 19:18

4
Aab
a2B
ab
ABB
[Abc][a2b]b

没输出

赞(0)

Cookie‘s AE86 : 回复 snake: 题目中说可以有一个[ ] 好像没有说可以有两个[ ]

2024年3月20日 20:39