1. 程式人生 > >簡單子串查詢--strstr的使用(ZCMU1108)

簡單子串查詢--strstr的使用(ZCMU1108)

1108: 鬆哥的困惑 Time Limit: 1 Sec Memory Limit: 128 MB Description 都到世界末日了,鬆哥都沒找到女朋友,因此鬆哥感到很困惑.沒想到到了世界末日都沒人喜歡我.鬆哥一生氣就釋出了徵友啟事,第二天,一共有n個人報名應徵鬆哥女友.鬆哥對女友的要求有三點,第一點,名字必須有三個字,第二點,名字中要帶Li,第三點名字中要帶Ting.鬆哥希望你能從n個人中.鬆哥決定選取一人並和她約會.你能找到是誰嘛? Input 多組測試資料. 每組測試資料的第一行是一個正整數(n<=100). 接下來n行分別有n個名字.每個名字不超過20個字元. 名字的格式為:名+姓,且首字母大寫,比如沈利鬆就叫LiSongShen. Output 對於每組資料輸出與鬆哥約會的名字. 輸入資料保證只有一個人滿足鬆哥的要求. Sample Input 2 LiSongShen LiTingXu Sample Output LiTingXu Way1使用了strstr函式:

#include <stdio.h>
#include <string.h>
char a[25],b[30];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int flag = 0;
        while(n--)
        {
            memset(a,'\0',sizeof(a));
            scanf("%s",a);
            const char *p = "Li";//不加const會有警告
            const char *q = "Ting";
            int num = 0;
            if(!flag)
            {
                for(int i = 0; a[i] != '\0'; i++)
                {
                    if(a[i] >='A' && a[i] <= 'Z')
                    {
                        num++;
                    }
                }
                if(num >= 3)
                {
                    if(strstr(a,p)&& strstr(a,q))
                    {
                        strcat(b,a);
                        flag = 1;
                    }
                }
            }
        }
        if(n == -1)
        {
            for(int i =0; b[i] != '\0'; i++)
                printf("%c",b[i]);
            printf("\n");
            memset(b,'\0',sizeof(b));
        }
    }
    return 0;
}

Way2未使用strstr:

 #include <stdio.h>
    #include <string.h>
    char a[25],b[25];
    int main()
    {
        int n,f;
        while(~scanf("%d",&n))
        {
            while(n--)
            {
                memset(a,'\0',sizeof(a));
                scanf("%s",a);
                int num = 0, flag1 = 0,flag2 = 0,flag = 0;
                if(!flag)
                {
                    for(int i = 0; a[i] != '\0'; i++)
                    {
                        if(a[i] >= 'A' && a[i] <= 'Z')
                        {
                            num++;
                        }
                        if(num >= 3)
                        {
                            for(int j = 1; a[j] != '\0'; j++)
                            {
                                if(a[j] == 'i' && a[j-1] == 'L')
                                {
                                    flag1 = 1;
                                    break;
                                }
                            }
                            if(flag1)
                            {
                                char c[6];
                                for(int k = 0; a[k] != '\0'; k++)
                                {
                                    memset(c,'\0',sizeof(c));
                                    int t = 0;
                                    for(int j = k; j< k+4; j++)
                                    {
                                        c[t++] = a[j];
                                    }
                                    if(strcmp(c,"Ting") == 0)
                                    {
                                        flag2 = 1;
                                        break;
                                    }
                                }
                            }
                            if(flag2)
                            {
                                flag = 1;
                                strcat(b,a);
                                break;
                            }
                        }
                    }
                }
            }
            if(n == -1)
            {
                for(int i = 0; b[i] != '\0'; i++)
                    printf("%c",b[i]);
                printf("\n");
                memset(b,'\0',sizeof(b));
            }
        }
    
        return 0;
    }