【问题标题】:How do I check if a string contains a certain character?如何检查字符串是否包含某个字符?
【发布时间】:2019-09-28 13:26:13
【问题描述】:

我是 C 编程的新手,如果我们有,我将如何检查字符串是否包含某个字符:

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

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

因此,如果“!”,我将如何将exclamationCheck 设置为 1存在,如果不存在则为 0?非常感谢您提供的任何帮助。

【问题讨论】:

  • 考虑strchr()strcspn() 函数。
  • 如果您不应该使用标准函数,那么遍历字符串的所有字符,将每个字符与您要查找的字符进行比较应该不会太难。如果你不知道怎么做,那么请回到你的教科书阅读更多关于循环和字符串的内容。

标签: c arrays string char string-comparison


【解决方案1】:

通过使用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 字符串库中的方法,那么,正如 @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

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


PS:What should main() return in C and C++?int,不是void

【讨论】:

  • 或者稍微简单一点:int exclamationCheck = strchr(str, '!') != NULL;
  • @melpomene(多么有意义的名字!),好主意,将其附加到我的答案中,谢谢!
  • strchr 函数是否也可以与字符 指针 一起使用?
  • @Someone 是的,请查看我的答案中的链接以获取该方法的参考。
【解决方案2】:

您可以使用普通搜索 ! 字符与

代码

#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;
}

【讨论】:

  • exclamationCheck = 1; 之后,您只需break 循环即可。
  • @PaulOgilvie,谢谢,已编辑。这是个好建议。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2016-08-09
  • 1970-01-01
  • 2015-12-25
  • 2014-05-07
  • 2019-12-29
  • 2019-08-05
相关资源
最近更新 更多