OJ一直通過不了 請大神看看!
給出兩個字串S和T,請判斷T是否為S的子串。本題請用"簡單匹配法"來做。提交AC后觀察Exe.Time,并與DS16、DS17比較。 使用系統語言自帶函式進行判斷,不會自己寫函式的,判cheat,封號。
Input
第一行是一個整數N,說明有多少個測驗用例。
接下來是N個測驗用例,每個測驗用例占2行:第一行是字串S,第二行是字串T,字串中不含空格。 1 ≤ strlen(S) , strlen( T ) ≤ 10000
Output
對每個測驗用例,輸出一行結果:是否子串,是則輸出"yes" ,否則輸出 "no"
Sample Input
2
aabcdd
abc
aaaaaaaaaaaaa
aaaaaab
Sample Output
yes
no
以下是我的代碼:
#include<stdio.h>
#include<string.h>
int main(void)
{
char S[10005];
char T[10005];
int a,b,c;
int N;
char ch;
int i=0;
scanf("%d",&N);
ch=getchar();
while(i<N){
gets(S);
gets(T);
if(strlen(S)==NULL||strlen(T)==NULL){ printf("no\n"); }
else {
for(a=0,b=0,c=0; a<strlen(S); a++)
{
if(S[a]!=T[b]) b=0;
if(S[a]==T[b]) b++;
if(b==strlen(T)) {c++;break;}
}
if(c!=0) printf("yes\n");
else printf("no\n");
}
i++;
}
return 0;
}
uj5u.com熱心網友回復:
1. getchar是在接收什么字符?在你的要求中沒看到2. strlen回傳的是個數字不能用NULL來判斷,要用數字判斷
3. 判斷子串應該是哪個字串短就把它當作子串處理
uj5u.com熱心網友回復:
if (S[a] != T[b]) b = 0;else if (S[a] == T[b]) b++;
應該是因為這個else,改了看看
uj5u.com熱心網友回復:
你的演算法沒問題可以通過,因為你把if陳述句的判定嵌套在while回圈里,所以每次匹配后,都會進行YES/NO的判定輸出uj5u.com熱心網友回復:
我改了但是還是不對....#include<stdio.h>
#include<string.h>
int main(void)
{
char S[10005];
char T[10005];
int a,b,c;
int N;
char ch;
int i=0;
scanf("%d",&N);
ch=getchar();
while(i<N){
gets(S);
gets(T);
if(strlen(S)==0||strlen(T)==0){ printf("no\n"); }
if(strlen(S)>=strlen(T))
{
for(a=0,b=0,c=0; a<strlen(S); a++)
{
if(S[a]!=T[b]) b=0;
if(S[a]==T[b]) b++;
if(b==strlen(T)) {c++;break;}
}
if(c!=0) printf("yes\n");
else printf("no\n");
}
else printf("no\n");
i++;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/74474.html
標籤:C++ 語言
下一篇:vs專案中如何添加檔案但不參考
