這個程式是
用來獲取字串中最后出現的指定內容的位置
如果沒有找到就輸出-1
編譯成功了
明明輸進去的兩個陣列是一樣的呀
可還輸出了-1到底哪里出錯了?
uj5u.com熱心網友回復:
k=sizeof(r)-2; h=sizeof(b)-2 你printf一下k和 h是否和你想像的一樣。uj5u.com熱心網友回復:
傳參時傳陣列會自動變成指標(無論你寫char a[]還是char a[4]),sizeof(r)和sizeof(b)回傳的都是8,即sizeof(char*),可以額外傳兩個長度參,或者把sizeof(r)-2換成strlen(r)-1,strlen在string.h里面。還有你的if (p < 0 && j > 0)應該改成if (p < 0 && j >= -1),j > 0而回傳j + 1的話回傳值一定>1,一看就知道錯了。
在第一個for前面加上if (k >= h),防止p >= 0而j < 0,不加這些也能正常使用是因為陣列越界回傳的是0xcc(204),一般的字串中不可能出現這個值,但是還是加上比較好
完整代碼
#include<stdio.h>
#include<string.h>
TIAC(char r[], char b[]) {
int k = (int)strlen(r) - 1, h = (int)strlen(b) - 1, p, j;
if (k >= h) {
for (; k >= 0; k--) {
for (p = h, j = k; p >= 0 && r[j] == b[p]; p--, j--);
if (p < 0 && j >= -1)return j + 1;
}
}
return -1;
}
main() {
char y[] = "qwe", g[] = "qwe";
printf("%d", TIAC(y, g));
}
uj5u.com熱心網友回復:
char *strstr(const char *haystack, const char *needle) 在字串 haystack 中查找第一次出現字串 needle 的位置,不包含終止符 '\0'。回圈尋找,最后一個就是你想要的位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137701.html
標籤:新手樂園
上一篇:03.Django-ORM
