如何检查字符串是否包含特定字符?

17

我对C编程还比较陌生,如何检查一个字符串是否包含某个字符?例如,如果我们有以下字符串:

void main(int argc, char* argv[]){

  char checkThisLineForExclamation[20] = "Hi, I'm odd!"
  int exclamationCheck;
}

那么,如果出现 "!",我该如何将 exclamationCheck 设置为 1,如果没有出现,则设置为 0?非常感谢您提供的任何帮助。

因此,如果出现 "!",exclamationCheck 将被设置为 1,否则将被设置为 0。谢谢任何给予帮助的人。


3
考虑使用 strchr()strcspn() 函数。 - John Bollinger
4
如果不允许使用标准函数,遍历字符串中的所有字符并将每个字符与要查找的字符进行比较应该不难。如果您不知道如何做到这一点,请回到教科书中更多地了解循环和字符串相关的内容。 - Some programmer dude
2个回答

21

例如,通过使用strchr()函数:

#include <stdio.h>
#include <string.h>

int main(void)
{
  char str[] = "Hi, I'm odd!";
  int exclamationCheck = 0;
  if(strchr(str, '!') != NULL)
  {
    exclamationCheck = 1;
  }
  printf("exclamationCheck = %d\n", exclamationCheck);
  return 0;
}

输出:

exclamationCheck = 1

如果你正在寻找简洁明了的一行代码,那么你可以采用 @melpomene 的方法:

int exclamationCheck = strchr(str, '!') != NULL;
如果不允许使用C String库中的方法,那么就像@SomeProgrammerDude建议的那样,您可以简单地遍历该字符串,并且如果任何字符是感叹号,就像在这个示例中所演示的那样:
#include <stdio.h>

int main(void)
{
  char str[] = "Hi, I'm odd";
  int exclamationCheck = 0;
  for(int i = 0; str[i] != '\0'; ++i)
  {
    if(str[i] == '!')
    {
      exclamationCheck = 1;
      break;
    }
  }
  printf("exclamationCheck = %d\n", exclamationCheck);
  return 0;
}

输出:

exclamationCheck = 0

请注意,如果找到至少一个感叹号,您可以中断循环,这样您就不需要遍历整个字符串。


附注:C和C ++中main()应该返回什么? 返回int而不是void


2
稍微简单一点:int exclamationCheck = strchr(str, '!') != NULL; - melpomene
@melpomene(多有意义的名字啊!),好主意,我已经将它添加到我的答案中了,谢谢! - gsamaras
strchr 函数也适用于 char 指针吗? - Someone
@Someone 是的,请查看我回答中方法的参考链接。 - gsamaras

1

您可以使用普通搜索以 ! 字符为标记。

代码

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[] = "Hi, I'm odd!";
    int exclamationCheck = 0;
    int i=0;
    while (str[i]!='\0'){
        if (str[i]=='!'){
            exclamationCheck = 1;
            break;
        }
        i++;
    }
    printf("exclamationCheck = %d\n", exclamationCheck);
    return 0;
}

1
exclamationCheck = 1; 之后,你可以直接使用 break 命令跳出循环。 - Paul Ogilvie
@PaulOgilvie,谢谢,帖子已编辑。这是一个好建议。 - EsmaeelE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接