更正后的代码:
int strrindex(char *s, char *t) {
int i, j, k, p;
i = -1;
for (k = 0; s[k] != '\0'; k++) {
if (strlen(s) < strlen(t)) break;
if (s[k] == t[0]) {
for (p = k; s[p] != '\0'; p++) {
j = p;
while (s[j] != '\0' && s[j] == t[j-k] && t[j-k] != '\0') { j++; }
if (t[j-k] != '\0') { break; }
i = k;
}
}
}
printf("%d\n", i);
return 0;
}
最佳答案
for (p = k; s[p] != '\0'; p++) {
while (s[p] == t[p] && t[p] != '\0') { p++; }
此时,您正在比较从位置 p
开始的字符串 s
和从位置 0 开始的字符串 t
。所以它不应该是 t[p]
,而是 t[p - k]
。
if (s[p] != t[p] || t[p] != '\0') { i = -1; }
你根本不需要这个 - 如果当前部分不匹配,你只需在最后一个匹配处留下 i
。 (如果到目前为止还没有匹配,无论如何都会是 -1)
关于c - 找到字符串 t 在字符串 s 中最右边出现的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173764/