女神教你字符串——AC不只是一个梦想

D - 女神教你字符串——AC不只是一个梦想
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)
Submit Status
Problem Description

AC is not a dream. ——女神
女神希望大家多多AC,希望大家能在AC中找到自信。于是女神问你,一句话里面有多少个ACdream?
不需要分大小写,忽略空格,回车。
所谓一句话是指以句号(.),问号(?),感叹号(!)结束的一串由可见字符(ASCII从32(空格)~126(‘~’波浪线))组成的字符串。
具体ASCII码表可查阅:请戳我
Input

由若干行字符串组成,每一句话即为一组数据,一句话的定义如题面。总字符数不超过100000字符。
Output

对于每组数据,输出一个整数。
Sample Input

AC is not a dream.
But ACdream is a dream world where every body can have an AC dream.
AC?AC!
Sample Output

0
2
0
0
Hint

请小心谨慎

题目大意:匹配字符串,”ACdream”。不区分大小写,忽略空格,回车。
分析:大致有三个坑点。一、统一大小写。二、如何处理行末回车,将多行字符串合并为一行。三、一行里可能不止一句。

代码:

#include <iostream>
#include <cstdio>
#include <cctype>
#include <string>
#include <cstring>
using namespace std;

const int maxn = 100010;

int n, m, kase;
int a[maxn], c[maxn];
char s[maxn], q[maxn] = "";
char t[10] = "acdream";

int main() {
    int ff = 0, tt = 0;
    while(cin >> s) {
        if(ff == 0) strcpy(q, s);
        if(ff == 1) strcat(q, s);
        int len = strlen(s);
        if(s[len-1] != '?' && s[len-1] != '.' && s[len-1] != '!') { ff = 1; continue; }   //坑点二,回车
        strcpy(s, q);
        int cnt1 = 1;
        len = strlen(s);
        memset(c, 0, sizeof(c));
        for(int i = 0; i < len; i++) {
            if(s[i] == '?' || s[i] == '.' || s[i] == '!')           //坑点三,多句
                c[cnt1++] = i;
            if(isupper(s[i])) s[i] += 32;                           //坑点一,大小写
        }
        for(int ll = 1; ll < cnt1; ll++) {
            int cnt2 = 0, ans = 0;
            memset(a, 0, sizeof(a));
            for(int i = c[ll-1]; i < c[ll]; i++)
                if(s[i] == 'a') a[cnt2++] = i;
            for(int i = 0; i < cnt2; i++) {
                int flag = 0;
                for(int j = a[i], k = 0; k < 7; j++, k++) {
                    if(s[j] == ' ') j++;
                    else if(s[j] != t[k]) {
                        flag = 1;
                        break;
                    }
                }
                if(!flag) ans++;
            }
            printf("%d\n", ans);
        }
        memset(q, 0, sizeof(q));
        tt = 0;
        ff = 0;
    }
    return 0;
}

你可能感兴趣的:(字符串)