1

问题:我需要写一个函数,

int is_lower_101(char c), 

如果它是小写,则返回 true,否则返回 false。而且我不能使用预定义的tolower类型函数。我也不能对字符使用整数值。

我需要帮助:我已经有了头文件:

#ifndef CHAR_H
#define CHAR_H

int is_lower_101(char c);

#endif

但是我在实现文件上遇到了麻烦。我不确定涉及字符的实现文件的一般格式是什么样的。我有一种感觉我必须使用条件,但我只是不确定我将如何显示它c是一个小写字符。我会使用 for 循环吗?谢谢。

4

4 回答 4

1

如果您不关心支持除athrough以外的任何字符z,那么您可以进行如下比较:

if (c >= 'a' && c <= 'z')

请注意,这是一个非常糟糕的主意,并且会在某人第一次输入简历时中断。出于这个原因,标准功能在那里。

于 2013-05-15T23:10:55.800 回答
1
int is_lower_101(char c){
    int i;
    for(i=0;i<26;i++){
        if("abcdefghijklmnopqrstuvwxyz"[i] == c)
            return i==i;
    }
    return i!=i;
}

使用 bsearch 版本。

#include <stdlib.h>

int cmp(const void *a, const void *b){
    return *((char*)a) - *((char*)b);
}

int is_lower_101(char c){
    return !!bsearch(&c, "abcdefghijklmnopqrstuvwxyz", 26, sizeof(char), cmp);
}
于 2013-05-15T23:26:12.900 回答
0

这是一个独立于字符集编码的实现,但它只支持只有小写字母是 26 个小写拉丁字母的语言环境(包括默认的 C 语言环境)。

在此处的答案中,它比其他实现占用更多的数据空间,因为它需要一个表,但它应该非常快,只需要几条指令即可对其参数进行零扩展,加载表的地址并查找结果。

#include <limits.h>

int is_lower_101(char a)
{
    static char t[UCHAR_MAX+1] = {
        [(unsigned char) 'a'] = 1,
        [(unsigned char) 'b'] = 1,
        [(unsigned char) 'c'] = 1,
        [(unsigned char) 'd'] = 1,
        [(unsigned char) 'e'] = 1,
        [(unsigned char) 'f'] = 1,
        [(unsigned char) 'g'] = 1,
        [(unsigned char) 'h'] = 1,
        [(unsigned char) 'i'] = 1,
        [(unsigned char) 'j'] = 1,
        [(unsigned char) 'k'] = 1,
        [(unsigned char) 'l'] = 1,
        [(unsigned char) 'm'] = 1,
        [(unsigned char) 'n'] = 1,
        [(unsigned char) 'o'] = 1,
        [(unsigned char) 'p'] = 1,
        [(unsigned char) 'q'] = 1,
        [(unsigned char) 'r'] = 1,
        [(unsigned char) 's'] = 1,
        [(unsigned char) 't'] = 1,
        [(unsigned char) 'u'] = 1,
        [(unsigned char) 'v'] = 1,
        [(unsigned char) 'w'] = 1,
        [(unsigned char) 'x'] = 1,
        [(unsigned char) 'y'] = 1,
        [(unsigned char) 'z'] = 1,
    };
    return t[(unsigned char) a];
}
于 2013-05-17T02:01:21.113 回答
-1

为确保字符是否小写,请使用 ASCII 表。 http://www.asciitable.com/index/asciifull.gif 所以如果字符代码在 97 和 122 之间 - 它是小写的

于 2013-05-15T23:09:26.320 回答