我做了一个程序,将小写字母转换为大写字母.我知道如何通过预处理程序指令将字符串转换为大写字母,但我不知道如何为字符串做.
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
预处理器没有循环.
因此,对于任意长度的字符串,您不能使用预处理器宏将所有字符转换为大写.
您上面的代码是错误的,因为您的宏应该如下所示:
#define TOUPPER(x) x = (x>='a' && x<='z')?(x-32):x;
Run Code Online (Sandbox Code Playgroud)
然后调用TOUPPER(string[i])你的for循环.
但我不明白宏观的重点.