问题:我需要编写一个函数,
int is_lower_101(char c),
如果它是小写则返回true,否则返回false。我无法使用预定义的tolower
类型函数。我也不能为字符使用整数值。
我需要帮助:我已经有了头文件:
#ifndef CHAR_H
#define CHAR_H
int is_lower_101(char c);
#endif
但我在实施文件上遇到了麻烦。我不确定涉及字符的实现文件的一般格式是什么样的。我有一种感觉,我必须使用条件,但我只是不确定如何显示c
是一个小写字符。我会使用for循环吗?感谢。
答案 0 :(得分:1)
如果您不关心支持a
到z
以外的任何字符,那么您可以进行比较,例如:
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之间 - 它是小写的