首页 > 解决方案 > 在C中检查字符串中的重复单词

问题描述

我在c中编写了一个代码来搜索字符串中的重复单词,它只是将字符串中的每个单词附加到一个二维字符串数组中,但是它为行数和重复字符串返回0,问题是什么代码?

int main() {
  char str[50] = "C code find duplicate string";
  char str2d[10][50];

  int count = 0;
  int row = 0, column = 0;

  for (int i = 0; str[i] != '\0'; i++) {
    if (str[i] != '\0' || str[i] != ' ') {
      str2d[row][column] = str[i];
      column += 1;
    } else {
      str2d[row][column] = '\0';
      row += 1;
      column = 0;
    }
  }

  for (int x = 0; x <= row; x++) {
    for (int y = x + 1; y <= row; y++) {
      if (strcmp(str2d[x], str2d[y]) == 0 && (strcmp(str2d[y], "0") != 0)) {
        count += 1;
      }
    }
  }

  printf("%i %i", row, count);

  return 0;
}

标签: arrayscstring

解决方案


问题是:

  1. if (str[i] != '\0' || str[i] != ' ')应该是if (str[i] != '\0' && str[i] != ' ')。如果我没记错的话,使用逻辑上的 or 将阻止到达该else案例。

  2. if (strcmp(str2d[x], str2d[y]) == 0 && (strcmp(str2d[y], "0") != 0))应该是if (strcmp(str2d[x], str2d[y]) == 0)。否则,当单词为 时,您的代码不会计算重复项"0"

  3. 一个。为避免混淆,请使用类似printf("Number of rows = %d, Number of duplicates = %d\n", row+1, count);. 由于 C 数组从索引 0 开始,这就是row您的代码中包含的内容。但是行数是1。

    湾。如果您现在还没有意识到,那么您的str变量中没有重复项:char str[50] = "C code find duplicate string";. 因此,您的代码返回正确的值 0。将其更改为char str[50] = "C code find duplicate duplicate";(例如),您的代码将正确返回 1。


推荐阅读