为什么我的功能不会挤压打印任何东西?

时间:2014-09-08 20:01:04

标签: c string copy

练习2-4。编写squeeze(s1,s2)的替代版本,删除s1中与字符串s2中的任何字符匹配的每个字符。这来自K& R.

有人可以告诉我为什么我的代码没有打印任何内容吗?我尝试了一切&不知道如何使用GDB。非常感谢!

编辑:好吧,我只是错过了一个i ++而且它有效。你们在说什么?我在主要的印刷声明......     #include

void squeeze(char s1[], char s2[]);

int main() {
  char s1[100] = "hello";
  char s2[100] = "pencil";
  squeeze(s1, s2);
  printf("s1 revised: %s\n", s1);
  return 0;
}

void squeeze(char s1[], char s2[]) {
  int i, j, k;
  i = k = j = 0;

  while (s1[i] != '\0') {
    for (j = 0; s2[j] != '\0'; j++) {
      if (s1[i] == s2[j]) {
        k = i;
        while (s1[k] != '\0') {
          s1[k] = s1[(k + 1)];
          //printf("***");
          if (s1[k] == '\0') {
            break;
          }
          k++;
        }
        break;
      }
      else {
        continue;
      }
    }
  }
}

2 个答案:

答案 0 :(得分:2)

您的循环变量i永远不会增加。

这是我适当管理的挤压。 两条更改的行有注释。

void squeeze(char s1[], char s2[]) {
  int i, j, k;
  i = k = j = 0;

  for ( ; s1[i] != '\0'; i++) {            /* INCREMENT i */
    for (j = 0; s2[j] != '\0'; j++) {
      if (s1[i] == s2[j]) {
        k = i;
        while (s1[k] != '\0') {
          s1[k] = s1[(k + 1)];
          /* printf("***"); */
          if (s1[k] == '\0') {
            break;
          }
          k++;
        }
        --i;                               /* BACK UP */
        break;
      }
      else {
        continue;
      }
    }
  }
}

答案 1 :(得分:1)

因为包含任何打印语句的唯一行被注释掉了。