1. 程式人生 > >【洛谷1580】yyy loves Easter_Egg I(字串處理題)

【洛谷1580】yyy loves Easter_Egg I(字串處理題)

點此看題面

大致題意: 略。(一道模擬題,自己去看題面吧)


幾個字元陣列函式

純粹是一道字串處理題,就當是學了一下各種與字元陣列相關的函式吧!

\(gets()\):這個是比較常用的函式,就是讀入一行的字元。

\(strlen()\):求出字元陣列的長度。

\(sscanf()\):從一個字元陣列中讀入,用法與\(scanf\)類似。

\(strstr()\):在一個字元陣列中找到另一個字元陣列第一次出現的位置,然後返回這個位置及其之後的字元。

\(strcmp()\):比較兩個字元陣列是否有差異。

\(count()\):後來才知道還有一個這麼神奇的函式,統計一個字元在字元陣列中出現的次數。我做的時候自己手寫了一個。

瞭解了這些函式,其實這道題就比較簡單了。


大致思路

先讀入第一行,用一個字元陣列\(target\)存下第一個被\(@\)的人,並開一個變數\(cnt\)記錄當前行數。

接下來,每次讀入一個字元陣列,如果讀完了,就輸出"好隊形"

然後找出當前說話的人的名字,比較其與\(target\),若相同則輸出"炸成功"

接下來是判斷這句話中存在的\(@\)個數是否為\(1\),不為\(1\)則輸出"炸失敗"

然後判斷被\(@\)的人是否為\(target\),若不是,也輸出"炸失敗"

具體實現詳見程式碼。


程式碼

#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define Gmax(x,y) (x<(y)&&(x=(y)))
#define Gmin(x,y) (x>(y)&&(x=(y))) 
#define abs(x) ((x)<0?-(x):(x))
#define swap(x,y) (x^=y^=x^=y)
#define uint unsigned int
#define LL long long
#define ull unsigned long long
#define INF 1000000000
#define N 1000 
#define hl_AK_NOI true
#define GetAt(s,t) (sscanf(strstr(s,"@"),"@yyy loves %s",t))//找到被@的物件
using namespace std;
char now[N+5],At[N+5],cur[N+5],target[N+5];
inline bool check(char *s,int len)//判斷字元陣列中含@個數是否為1,其實可以用count()函式替代
{
    register int i,tot=0;
    for(i=0;i<len;++i) if(!(s[i]^'@')&&tot++) return false;//如果出現次數大於1,返回false
    return tot;//如果出現次數為1,返回true;如果出現次數為0,返回false
}
int main()
{
    register int cnt=1,len;
    gets(now),GetAt(now,target);//用target存下第一個被@的人
    while(hl_AK_NOI)
    {
        if(++cnt,gets(now),len=strlen(now),len<2) return printf("Unsuccessful @yyy loves %s attempt\n%d\nGood Queue Shape",target,cnt-1),0;//判斷是否讀完
        if(sscanf(now,"yyy loves %s",cur),!strcmp(cur,target)) return printf("Successful @yyy loves %s attempt",target),0;//比較當前說話的人與target
        if(!check(now,len)) return printf("Unsuccessful @yyy loves %s attempt\n%d\nyyy loves %s",target,cnt,cur),0;//判斷這句話中存在的@個數是否為1
        if(GetAt(now,At),strcmp(At,target)) return printf("Unsuccessful @yyy loves %s attempt\n%d\nyyy loves %s",target,cnt,cur),0;//判斷被@的人是否為target
    }
    return 0;
}