【问题标题】:checking a string for correct characters in c在c中检查字符串中的正确字符
【发布时间】:2009-10-06 22:40:02
【问题描述】:

有没有更简单的方法可以在 c 中执行以下操作?

unsigned short check_str(char *str)
{
    while (*str)
    {
        if (!(*str == ' ' || *str == '(' || *str == ')' ||
              *str == '1' || *str == '2' || *str == 'a' ||
              *str == 'x' || *str == 'b'))
              return 0;
        str++;
     }
     return 1;
 }

基本上,它会检查字符串中除列出的字符之外的任何字符,如果找到则返回 false。有没有更简单的功能?

【问题讨论】:

  • 您可能想要提高编译器的警告设置:您需要在函数末尾添加return 1; 才能正确。
  • 啊,是的,我只是不小心把它漏掉了。

标签: c string


【解决方案1】:

你想要标准库函数strspn:

strspn(str, " *(12axb") == strlen(str);

它将计算str 中的字符,直到它看到第一个不是第二个参数中的字符之一。因此,如果它没有找到任何不匹配的字符,它将返回字符串的长度。

一种更快的写法是检查\0,而不是调用strlen

str[strspn(str, " *(12axb")] == '\0';

【讨论】:

  • +1 我也有同样的strspn() 想法,但不知道如何提高效率。很好的呼吁。
  • str[strspn(str, " *(12axb")] == '\0'; 将返回 TRUE 是 'str' 实际上是 '\0' 吗?!不是吗?
  • @user457015:很好,这里需要先检查一个空字符串。
【解决方案2】:

Pavel 的答案绝对是您针对特定问题想要的答案,但我只是想补充一点,对于验证字符的更一般问题,如果您的字符串是 ASCII,您还可以非常轻松地检查字符范围。例如:

if (*str >= '0' || *str <= '9') {
   // *str is a number.
}

如果您在连续范围内有很多有效字符,这可能会很有用。有许多标准库函数(例如 isalpha)可以为您检查常用范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多