C - 如何计算字符串中的确切单词? (不包括单词在另一个里面的次数)

C - How to count exact word in a string? (exluding the times the word is inside of another)

我正在制作一个程序,它从标准输入或文件中读取数据并计算 if 语句的数量。我已经做到了,但是如果例如我有一个名为 "asdifasd" 或 "ifasd" 的变量,它将被视为一个 if 语句。如何仅提取 if 语句?这是我的代码:

char str[150];
int ifs = 0;

while (fgets(str, sizeof(str), stdin) != NULL)
    {
        char *p = str;
        while (((p = (strstr(p, "if"))) != NULL)) {
            ifs++;
            ++p;
        }
    }

我一直在考虑用 strncmp 做点什么,但我不确定怎么做。

在使用 strstr 找到 "if" 后,检查前后的字符以确保它们不是字母。喜欢:

{
  char *p = str;
  while (((p = (strstr(p, "if"))) != NULL)) {
    if ((p == str || !isalnum((unsigned char) p[-1])) &&
         !isalnum((unsigned char) p[2]))
      ++ifs;
    ++p;
  }
}