首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

写一个宏函数来改变字符串的大小写?

宏函数是一种在预处理阶段展开的代码片段,用于在编译时进行文本替换。在改变字符串的大小写时,可以使用宏函数来实现。

下面是一个宏函数的示例,用于将字符串中的字母转换为大写或小写:

代码语言:txt
复制
#include <stdio.h>

#define TO_UPPER_CASE(c) ((c >= 'a' && c <= 'z') ? (c - 32) : c)
#define TO_LOWER_CASE(c) ((c >= 'A' && c <= 'Z') ? (c + 32) : c)

void changeCase(char* str, int (*caseFunc)(int)) {
    for (int i = 0; str[i] != '\0'; i++) {
        str[i] = caseFunc(str[i]);
    }
}

int main() {
    char str[] = "Hello, World!";
    
    printf("Original string: %s\n", str);
    
    changeCase(str, TO_UPPER_CASE);
    printf("Uppercase string: %s\n", str);
    
    changeCase(str, TO_LOWER_CASE);
    printf("Lowercase string: %s\n", str);
    
    return 0;
}

这个示例中定义了两个宏函数:TO_UPPER_CASETO_LOWER_CASE,分别用于将字符转换为大写和小写。changeCase函数接受一个字符串和一个函数指针作为参数,通过调用函数指针来改变字符串的大小写。

main函数中,我们首先打印原始字符串,然后调用changeCase函数两次,分别传入TO_UPPER_CASETO_LOWER_CASE作为函数指针,最后打印转换后的字符串。

这个宏函数的优势在于它可以在编译时进行文本替换,避免了函数调用的开销,提高了代码的执行效率。它适用于需要频繁改变字符串大小写的场景,比如字符串的格式化、密码处理等。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Windows内核中内存管理

    内存管理要点 内核内存是在虚拟地址空间高2GB位置,且由所有进程所共享,进程进行切换时改变只是进程用户分区内存 驱动程序就像一个特殊DLL,这个DLL被加载到内核地址空间中,DriverEntry...上面这些函数主要分为带有标记和不带标记两种,其中有Quota是按配额分配,带有标记函数可以通过这个标记来判断这块内存最后有没有被分配,标记是一个字符串,但是这个字符串是用单引号引起来。...一般给4个字符,由于IntelCPU采用是高位优先存储方式,所以为了阅读方便,一般将这个字符串倒着 这些函数分配内存一般使用下面的函数来释放 VOID ExFreePool(...: //头插法,采用头插法只改变链表数据顺序,链表头仍然是链表中一个元素 VOID InsertHeadList( IN PLIST_ENTRY ListHead, //链表头指针...Tag:数申请内存时填写标志相同 Depth:系统保留,必须填0 创建容器之后,可以用下面两个函数来分配内存 PVOID ExAllocateFromNPagedLookasideList

    1.4K20

    一个定义,不用大于号小于号和if,判断正整数a,b大小

    今天分享一个有意思题目,考察了两个C语言容易被忽视知识点。 题目: 一个定义,不用大于号>、小于号<和if,判断正整数a,b大小。...b:a 解答: 0x80000000 二进制是:1000 0000 0000 0000 0000 0000 0000 0000(第一位是符号位,所以此数是负数) 如果a-b是正数:根据二进制数表示..., 分为符号位跟数值位,0正1负,所以a-b最高位是0,那么与上1000 0000 0000 0000 0000 0000 0000 0000之后,三元运算符判断条件结果是0,输出a 如果a-b是负数...那最高位是1,与上1000 0000 0000 0000 0000 0000 0000 0000之后,三元运算符判断条件结果是1,输出b 考察知识点: 1、与或非 2、三元运算符 拔高题(大厂笔试题): 一个定义...,判断正整数a,b大小。 大家可以在评论区留下自己答案,最优秀答案有红包奖励。

    95420

    python 如何改变字符串中某一个值_python替换字符串某个字符

    一、            Split()  作用:将字符串分割成为列表,不改变字符串原始值  这里以x为分割符,将a分成了含有三个元素列表并输出。但不...  ...格式化字符串  字符串格式化使用字符串格式化操作符即百分号%来实现。在%左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化值(可以是元组或字典等)。  注意:  如果格式化...  ...Python中内置有对字符串进行格式化操作%。  模板  格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现格式。... 杨海 何子健 杨 征,更多章节内容可以访问云栖社区“华章计算机”公众号查看。  ...字符串类型是不可以改变,你无法将原字符串进行修改,但是可以将字符串一部分复制到新字符串中,来达到相同修改效果。

    5.7K00

    toLocaleLowerCase 函数

    #startsWith()使用方法#### string.startsWith(searchvalue, start) searchvalue:必需,要查找字符串。...start:可选,查找开始位置,默认为 0。 方法用于检测字符串是否以指定字符串开始。 如果是以指定字符串开头返回 true,否则 false。...startsWith() 方法对 大小写敏感 。 toLocaleLowerCase() 方法根据本地主机语言环境把字符串转换为小写。 本地是根据浏览器语言设置来判断。...注意: toLocaleLowerCase() 方法没有改变原始字符串。 提示: 使用 toLocaleUpperCase()(https://links.jianshu.com/go?...注意: toLocaleUpperCase() 方法没有改变原始字符串。 提示: 使用 toLocaleLowerCase()(https://links.jianshu.com/go?

    1.3K44

    RTOS函数命名规则

    驼峰命名法,正如它名称所表示那样,指的是混合使用大小写字母来构成标识符名字。其中第一个单词首字母小写,余下单词首字母大写。...例如: printEmployeePaychecks(); 函数名中每一个逻辑断点都有一个大写字母来标记。 帕斯卡(Pascal)命名法:与驼峰命名法类似。...只不过驼峰命名法是第一个单词首字母小写,而帕斯卡命名法则是第一个单词首字母大写。因此这种命名法也有人称之为“大驼峰命名法”。...prv :static函数 v: void函数 函数名 函数名包含了函数返回值类型、函数所在文件名和函数功能,如果是私有的 数则会加一个 prv(private)前缀。...; 定义 FreeRTOS大多数都是用大写字母,并以小写字母作为前缀来表示 定义了,如下所示; _s,_t后缀 _s:struct _t:type

    1.9K20

    校长讲堂第十讲

    首先,我们希望可以通过改变一个数字并重新编译程序来改变一个特殊量(如表大小)所有实例。 其次,我们可能希望定义一些东西,它们看起来象函数但没有函数调用所需运行开销。...,这会正常地工作,但当 max()是一个时候会失败。...而第二个参数会被求值两次(在体中,x 出现了两次,但由于它两次出现分别在一个:两边,因此在putc()一个实例中它们之中有且仅有一个被求值)。...如果我们假设所有的小写字母和所有的大写字母都是相邻大小写之间可能有所差距),我们可以得到这样函数: toupper(c) { if(c >= 'a' && c <= 'z') c += 'A'...然而,当你试着 toupper(*p++)时,会出现奇怪结果。 另一个需要注意地方是使用可能会产生巨大表达式。

    34061

    使用VBA加载小心 Workbook.FullName 属性

    Workbook.FullName在VBA中是一个非常常用属性,返回是工作簿全路径,首先查看一下帮助文件: 返回对象名称(以字符串表示),包括其磁盘路径。String 型,只读。...再仔细一看,会发现我故意将一些字母大小写替换了,文件能正确打开,但FullName返回字符串和原始字符串有差异了。...当然,实际代码过程中,一般不会这样故意去修改文件路径。...我个人有这样一个使用习惯,由于需要使用VBA功能较多,我将一些功能分类编写了不同宏文件,这些文件存放在同一个文件夹里,只设置加载一个加载。...如下图所示,修改了路径中字母大小写,加载myVBA.xlam没有过滤掉: ?

    1.5K40

    (预编译)详解

    2.当预处理器搜索#define定义符号时候,字符串常量内容并不被搜索。 3.2.4 #和## 1)#作用: 思考这样一个问题:如何把参数插入到字符串当中呢?...main() { int a = 10; PRINT(a); int b = 20; PRINT(b); return 0; } 把一个字符串从要替换字符串中点分成两个字符串...实质上这个其实是PRINT(n) printf("The value ""n"" is %d\n",n),相当于在'#'后面部分字符串改变后又被重新拼接起来形成一个完整字符串。...函数参数只在函数调用时候求 值一次,它结果值传递给 数。...3.4文件包含 我们不论C语言还是C++语言,我们都会用到头文件,像等,其实,#include指令可以使另外一个文件被编译。

    19610

    《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇

    flags 标志位,用于控制正则表达式匹配方式,如:是否区分大小写,多行匹配等等。参见上方可选标志表格 匹配成功re.match方法返回一个匹配对象,否则返回None。...实例及输出: 第一个匹配成功,第二个则失败 3.4.2re.search() re.search 扫描整个字符串并返回第一个成功匹配。...flags 标志位,用于控制正则表达式匹配方式,如:是否区分大小写,多行匹配等等。参见上方可选标志表格 匹配成功re.search方法返回一个匹配对象,否则返回None。...用法1 直接使用语法格式为: re.findall(pattern, string, flags) 参数: pattern 正则表达式 string 待匹配字符串 flags re一些flag,可不...flags 标志位,用于控制正则表达式匹配方式,如:是否区分大小写,多行匹配等等。

    16210

    【C语言基础】:预处理详解(二)

    和函数对比: 二、#和##运算符 2.1 #运算符 #运算符是一个预处理器运算符,用于字符串化(Stringification)。...当你在定义中使用 # 运算符时,它会将参数转换为一个字符串字面量。这意味着,当被展开时,参数值会被放在双引号中,成为字符串一部分。...利用前面的那个铺垫,两个字符串可以看成一个字符串。 注意:使用 # 运算符时,应确保参数两侧有空格或其他非字母数字字符,否则可能会导致字符串化不正确。...#undef 指令通常用于以下情况: 防止名冲突:如果在不同头文件中定义了相同名,或者在修改代码时需要改变定义,可以使用 #undef 来确保最新定义是有效。...这种方法允许开发者在不修改源代码情况下,动态地改变编译过程和生成程序行为。 定义 大多数C语言编译器允许使用命令行参数来定义

    13410
    领券