我做了一个程序,将小写字母转换为大写字母。我知道如何通过预处理程序指令将字符串转换为大写字母,但我不知道如何为字符串执行此操作。
#include #include #include #define UPPER([]) ([]-32) void fstring_convert(char string[]); void main(void) { char string[40]; printf("Enter a string:"); gets(string); fstring_convert(string); printf("%s",string); getch(); } void fstring_convert(char string[]) { int i; for(i=0; ;i++) { if(string[i]==' ') { string[i]=string[i+1]; } if(isdigit(string[i])) { string[i]+=1; } UPPER('string[i]'); if(string[i]==' ') break; } }
预处理器没有循环。
因此,对于任意长度的字符串,您不能使用预处理器宏将所有字符转换为大写。
你上面的代码是错误的,因为你的宏应该是这样的:
#define TOUPPER(x) x = (x>='a' && x<='z')?(x-32):x;
然后在for
循环中调用TOUPPER(string[i])
。
但我不明白宏观的重点是什么。
您应该对字符串的每个字符使用C标准库函数toupper()
(在循环中)。 此function具有正确处理非字母字符的优点。
这个家庭作业是教你ascii和类型转换。
一次循环字符串一个字母。 对于每个字母,查找字母的ascii代码,(在编码时找到大写的偏移量,并在常量中存储),然后将偏移量添加到字母中。
提示:char可以作为int转换。
如果你假设你正在处理ASCII,那么你也可以利用字符的布局方式。 要转换为大写,请执行c & ~0x20
。 要转换为小写,请执行c | 0x20
c | 0x20
。 要在大写和小写之间切换, c ^ 0x20
。 这些基本上相当于增加或减少32(== 0x20),但它们更好,因为重复应用它们会做你所期望的,例如toupper(toupper(c))
是大写,而不是c - 64
即垃圾。
查看https://www.kernel.org/doc/man-pages/online/pages/man7/ascii.7.html ,尤其是靠近末尾的hex表。 它清楚地显示了不同角色之间的关系。 有一些不错的模式,但我怀疑,由于历史原因,有一些不幸的不一致。 例如,要在[
和]
或{
和}
之间进行转换,您可以只执行’c ^ 0x6’,但在(
和)
之间它是不同的,并且它与<
和>
不同。 但是,仍然可以定义一个无分支(即不是s等)表达式来计算任何给定分隔符的匹配分隔符。
以上就是c/c++开发分享不能通过预处理器指令将小写转换为大写字符串相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522565.html