Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-如何计算字符串中的精确单词?(排除单词在另一个单词中的时间)_C_String_Word - Fatal编程技术网

C-如何计算字符串中的精确单词?(排除单词在另一个单词中的时间)

C-如何计算字符串中的精确单词?(排除单词在另一个单词中的时间),c,string,word,C,String,Word,我正在制作一个程序,它可以从stdin或文件中读取数据,并计算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"))

我正在制作一个程序,它可以从stdin或文件中读取数据,并计算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做些什么,但我不知道怎么做。

在你找到使用strstrstr的“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;
  }
}

不确定我理解你的问题-代码即使在一个词的中间也会计算所有的“如果”,告诉我们,<代码> IFASD 和<代码>(ASD)< /代码>有什么明显的区别?你怎么能用它来解决你的问题呢?不,伙计,我希望它只计算if语句。我不想让它像“int qweif=0;”那样算作if语句。@kaylum我试着算作“if”(“and“if”),但我不知道怎么做,结果失败了。好吧,那就让我们看看那个尝试。除非你给我们看那个代码,否则我们无法告诉你哪里做错了。“确保它们不是字母”。这是不够的。例如,下划线(
\uu
)不是一个字母,但它是变量名中的一个有效字符。在“word”的定义中加入下划线肯定是微不足道的。写一个完整准确地解决问题的答案肯定是微不足道的?@Waxrat谢谢你!它很有效。我试着做了两个while循环,一个搜索“如果”和另一个搜索“如果”,但我认为它仍然有一些缺陷。我认为你的解决方案效果更好。