我需要帮助理解角色操纵

时间:2013-05-15 23:04:16

标签: c character lowercase

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

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 个答案:

答案 0 :(得分:1)

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

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

请注意,这是一个非常糟糕的主意,并且会在第一次有人输入简历等时破坏。标准功能就是出于这个原因。

答案 1 :(得分: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 ver。

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

答案 2 :(得分: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];
}

答案 3 :(得分:-1)

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