不使用ctype.h中的toupper()和tolower()
时间: 2024-12-20 20:15:30 浏览: 6
字符函数ctype.h应用举例
如果不想使用`ctype.h`库提供的`toupper()`和`tolower()`函数,可以手动实现大小写字母的转换。例如,你可以通过ASCII码值来进行转换。以下是不依赖这两个函数的一种简单方法:
```c
#include <stdio.h>
#include <string.h>
// 手动实现的大写转换
char to_upper(char c) {
if (c >= 'a' && c <= 'z') {
return c - ('a' - 'A');
}
return c;
}
// 手动实现的小写转换
char to_lower(char c) {
if (c >= 'A' && c <= 'Z') {
return c + ('a' - 'A');
}
return c;
}
void convert_case(char *sentence) {
int len = strlen(sentence);
for (int i = 0; i < len; i++) {
if (i == 0 || sentence[i - 1] == ' ' || sentence[i - 1] == ',' || sentence[i - 1] == '.') { // 首字母和其他特定位置转大写
sentence[i] = to_upper(sentence[i]);
} else if (sentence[i] == 'i' || sentence[i] == 'I') { // 特殊的'I'或'i'保留不变
continue;
} else {
sentence[i] = to_lower(sentence[i]); // 其他字母转小写
}
}
}
int main() {
char input[101];
printf("请输入一句英文句子(不超过100字符): ");
fgets(input, sizeof(input), stdin); // 注意fgets处理换行符
// 移除多余的换行符
size_t len = strlen(input);
if (input[len - 1] == '\n') {
input[len - 1] = '\0';
}
convert_case(input);
printf("输出结果: %s\n", input);
return 0;
}
```
在这个版本的程序中,我们分别创建了`to_upper`和`to_lower`函数,它们通过计算ASCII码差值实现了大小写的切换。但是这种方法可能会比直接使用系统库函数稍微慢一些,因为每个字符都需要做一次加减运算。
阅读全文