各位大佬好,我這做題遇到了一些問題,請幫幫忙,謝謝。


我的代碼如下
#include <stdio.h>
#define MAXS 30
#include<string.h>
char *search( char *s, char *t )
{
int i,k,l;
int j=0;
l = strlen(s);
i = strlen(t);
if( i-l <= MAXS){
while(s[j]){ //回圈至陣列結束
if(s[j]==t[0]){ //如果發現第一個字母
for( k=1 ; k<i ;k++){ //對后倆個字母
while( s[j+k]!= t[k]|| j+k>MAXS) return NULL; //制藥后面的字母不對就回傳null
}
return &s[j]; //如果都對上回傳首字母地址
} //如果找不到第一個字母回傳null
j++;
}
}
return NULL;
}
#include <stdio.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] );
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%ld\n", pos - s);
else
printf("-1\n");
return 0;
}
void ReadString( char s[] )
{
gets(s);
}
在代碼編譯程序中不符合其中的一個情況,我看不太懂這個情況……請大佬們指教
uj5u.com熱心網友回復:

這個是錯誤 傳錯圖片了
uj5u.com熱心網友回復:
while( s[j+k]!= t[k]|| j+k>MAXS) return NULL;
這條陳述句要先判斷j+k > MAXS,然后再判斷s[j+k] != t[k];
while( j+k>MAXS || s[j+k]!= t[k]) return NULL;
否則會導致越界。
uj5u.com熱心網友回復:
while( j+k>= MAXS || s[j+k]!= t[k]) return NULL;
加上一個=號,否則也會導致越界。因為j+k的取值是[0, MAXS-1]
uj5u.com熱心網友回復:
大佬您好,我改了一下,在自己電腦運行是沒問題但是提交的時候裁判程式還是報那個錯誤。
uj5u.com熱心網友回復:
if( i-l <= MAXS){這句有意義嗎?i是子串長度,l是源串長度,那么i - l肯定小于MAXS。即使i > l,那么只要不大于30,都是成立的。但是如果i > l,那么就不應該比較了吧。
char *search( char *s, char *t )
{
int i,k,l;
int j=0;
l = strlen(s);
i = strlen(t);
printf("i = %d, l = %d\n", i, l);
if( i < l) {
while(s[j]){ //回圈至陣列結束
if(s[j]==t[0]){ //如果發現第一個字母
for( k=1 ; k<i ;k++){ //對后倆個字母
//while( s[j+k]!= t[k]|| j+k>MAXS) return NULL; //制藥后面的字母不對就回傳null
while( j + k >= l || s[j+k]!= t[k]) return NULL; //制藥后面的字母不對就回傳null
}
return &s[j]; //如果都對上回傳首字母地址
} //如果找不到第一個字母回傳null
j++;
}
}
return NULL;
}
供參考~
如果還有問題,建議測驗樣例中加上輸入的源串長度正好是MAXS-1或者大于等于MAXS。
樓主的輸入邏輯里,沒有對輸入的內容大于等于MAXS做判斷。
uj5u.com熱心網友回復:
同學你的測驗點是自己調出來的還是老師給了授權?,我自己做只有正確和錯誤這兩個提示,唉~uj5u.com熱心網友回復:
同學你的測驗點是自己調出來的還是老師給了授權?,我自己做只有正確和錯誤這兩個提示,唉~
啊 你是在哪做的啊
uj5u.com熱心網友回復:
同學你的測驗點是自己調出來的還是老師給了授權?,我自己做只有正確和錯誤這兩個提示,唉~
啊 你是在哪做的啊
就是pta,不過我必須要老師授權才可以看測驗點
uj5u.com熱心網友回復:
同學你的測驗點是自己調出來的還是老師給了授權?,我自己做只有正確和錯誤這兩個提示,唉~
啊 你是在哪做的啊
無所謂了
,學校要求不同吧
uj5u.com熱心網友回復:
同學你的測驗點是自己調出來的還是老師給了授權?,我自己做只有正確和錯誤這兩個提示,唉~
啊 你是在哪做的啊
無所謂了,學校要求不同吧
我這個是浙大PTA,我這好多不會,枯了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/15830.html
標籤:C語言
上一篇:BA優化 相機3D位姿
