簡單子串查詢--strstr的使用(ZCMU1108)
阿新 • • 發佈:2018-12-19
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; }