C-如何计算字符串中的精确单词?(排除单词在另一个单词中的时间)
我正在制作一个程序,它可以从stdin或文件中读取数据,并计算if语句的数量。我已经这样做了,但如果我有一个名为“asdifasd”或“ifasd”的变量,它将被算作if语句。如何单独提取if语句?这是我的密码: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"))
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循环,一个搜索“如果”和另一个搜索“如果”,但我认为它仍然有一些缺陷。我认为你的解决方案效果更好。