c - 有没有办法检查数组中字符串的大写和 isalpha 大小写?
问题描述
while(1)
{
char buff[1000];
printf("Enter the word: ");
fgets(buff, 1000, stdin);
if(!strcmp(buff, "\n"))//empty search then break the loop
{
fprintf(stderr, "Exiting the program\n");
break;
}
int error = 0;
int i = 0;
while(buff[i] != '\0')
{
if(buff[i] >= 33 && buff[i] <= 96)
{
break;
}
error = 1;
i++;
}
if(error == 0)
{
fprintf(stderr, "Please enter something containing only lower-case letters\n");
}
}
我希望输出为hello World
,Please enter something containing only lower-case letters
但我没有收到该错误。如果我输入World hello
我会得到预期的结果,它会打印错误消息。
有没有办法对整个数组使用 isalpha ?
解决方案
有用于检查大小写的库函数。它们被称为isupper
和islower
。使用它们。虽然它与'a'
97 不同,但它可能会发生。如果您指的是字母'a'
,则使用字符文字'a'
而不是数字 97。此外,字母甚至不能保证是连续的,因此'z'-'a'
不能保证被评估为 22。但是,数字必须是连续的,所以'9'-'0'
总是评估为 9。但是依靠诸如此类的库函数要安全得多isalpha
。我在这里写了关于编码的文章:https ://stackoverflow.com/a/46890148/6699433
要纠正你的错误,你需要一个适当的条件。根据您的问题,如果任何字符不是小写字母或空格,它应该打印错误消息。此外,您的代码过于复杂。这是一个解决方案:
int i = 0;
while(buff[i] != '\0') {
if(!(islower(buff[i]) || isspace(buff[i]))) {
fprintf(stderr, "Please enter something containing only lower-case letters\n");
break;
}
i++;
}
有没有办法对整个数组使用 isalpha ?
C 没有内置功能,但您可以编写自己的映射器。
/* Apply function f on each of the elements in str and return false
* if f returns false for any of the elements and true otherwise.
*/
bool string_is_mapper(const char *str, size_t size, int (*f)(int c))
{
for(int i=0; i<size && str[i] != '\0'; i++)
if(!f(str[i])) return false;
return true;
}
现在,您可以像这样使用此映射器:
if(string_is_mapper(str, strlen(str), isupper)
puts("All characters in str is upper case");
您甚至可以将自己的函数编写到插件中,只要它们符合这个原型:
int condition(int c);
推荐阅读
- swiftui - 如何获取 SwiftUI 文本中每个字符的位置
- python - 具有置信度的形状检测?
- java - 如何使用 python/kivy 在 Android 上获取音频(麦克风)输入
- python - 如何通过 discord.py 提及获得某人的用户
- javascript - 获取正确的光栅图像文本的问题
- java - 我应该在单独的机器上安装 ActiveMQ 吗?
- amazon-web-services - 如何检查我的 CDK 堆栈中的所有资源是否具有某些属性?
- opencart - Opencart CDN 的建议
- string - 将带有逗号分隔的浮点数的字符串列转换为 2D NumPy 数组的有效方法?
- javascript - 我想在最后用 jquery 获得有用的链接