C 无法通过预处理器指令将字符串从小写转换为大写

C 无法通过预处理器指令将字符串从小写转换为大写,c,C,我制作了一个程序,可以将小写转换成大写字符串。我知道如何通过预处理器指令将字符转换成大写,但我不知道如何处理字符串 #include<stdio.h> #include<conio.h> #include<ctype.h> #define UPPER([]) ([]-32) void fstring_convert(char string[]); void main(void) { char string[40]; printf("Enter a strin

我制作了一个程序,可以将小写转换成大写字符串。我知道如何通过预处理器指令将字符转换成大写,但我不知道如何处理字符串

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#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]=='\0')
    break;
 }

}
#包括
#包括
#包括
#定义上限([])([]-32)
void fstring_convert(字符字符串[]);
真空总管(真空)
{
字符串[40];
printf(“输入字符串:”);
获取(字符串);
fstring_convert(字符串);
printf(“%s”,字符串);
getch();
}
void fstring_convert(字符字符串[])
{
int i;
对于(i=0;i++)
{
如果(字符串[i]='')
{
字符串[i]=字符串[i+1];
}
if(isdigit(字符串[i]))
{
字符串[i]+=1;
}
上('string[i]');
如果(字符串[i]='\0')
打破
}
}

应该对字符串的每个字符(在循环中)使用C标准库函数
toupper()
。此函数的优点是可以正确处理非字母字符。

预处理器没有循环

因此,对于任意长度的字符串,不能使用预处理器宏将所有字符转换为大写

上面的代码有缺陷,因为宏应该如下所示:

#define TOUPPER(x) x = (x>='a' && x<='z')?(x-32):x;

#define TOUPPER(x)x=(x>='a'&&x这项家庭作业是教你有关ascii和类型转换的知识

一次循环遍历字符串一个字母。对于每个字母,查找该字母的ascii码(查找到大写的偏移量,在编码时这样做一次并存储在常量中),然后将偏移量添加到该字母


提示:字符可以转换为int。

如果您假设您正在处理ASCII,那么您最好利用字符的布局方式。要转换为大写,请执行
c&~0x20
。要转换为小写,请执行
c | 0x20
。要在大写和小写之间切换,请执行
c^0x20
。这些基本操作是:CALY等于加或减32(=0x20),但它们更好,因为重复应用它们可以实现您预期的效果,例如
toupper(toupper(c))
是大写,而不是
c-64
即垃圾


检查一下,尤其是靠近末尾的十六进制表。它清楚地显示了不同字符之间的关系。有一些很好的模式,但我怀疑由于历史原因存在一些不幸的不一致。例如,在
[
]
{
}之间转换
您可以只执行'c^0x6',但在
之间是不同的,对于
也是不同的。但是,仍然可以定义无分支(即,如果
s等,则没有
)表达式来计算任何给定定界符的匹配定界符。

这是你的家庭作业吗?用宏将字符串转换为大写?真的吗?无法想象你奇怪的尝试
定义一个名为
UPPER
的宏会在预处理器中运行。请只发布编译过的代码。我被告知要使用preprocess教授directives@fahad:这是一个非常不寻常的要求。总是可以选择
#define my_toupper(x)toupper(x)
。你的意思是我可以调用预处理器内的内置函数?@fahad:你知道预处理器的功能吗?如果不知道,你应该查阅你的C书。