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/

相关文章:

在 OSX 上使用 C 编译或使用 libxml

c - 如何将多行写入 C 中的输出文件?

c - 如何关闭 clang 中的本地数组合并?

python - 二进制搜索算法不起作用

python - 将代码点的 numpy 数组与字符串相互转换

c - 在 C 中初始化 char 和 string 变量

algorithm - 如何在 O(nloglogn) 时间复杂度内对 range[1, logn**logn] 中的 n 个元素进行排序?

c++ - 查找 C 字符串中的错误

javascript - 在没有正则表达式的 JavaScript 中,不区分大小写的字符串全部替换

c - 在 C 中搜索唯一元素组合的算法(结果字符串中的元素位置无关紧要)