c - 找到字符串 t 在字符串 s 中最右边出现的位置

标签 c algorithm string

更正后的代码:

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/

相关文章:

c - 解引用指针错误

java - 字符串置换算法的复杂性

java - 我怎样才能修改这个视线算法来接受穿过角落的光线?

c++ - 位反转 : Generating Bit Reversal Lookup Table for N-Bits

C 字符串文字链接

php - 使用多维数组构建查询字符串

java - 将字符串类型引用标记为 volatile 安全吗?

C 编程 : EOF as a character

c - 什么是总线错误?它与段错误不同吗?

c - 猜单词 : I/O C logic error