问题描述
我犯了一个程序,它小写转换为大写一个string.i知道如何通过preprocessor指令一个字符转换为大写,但我不知道该怎么做它的字符串。
#包括LT&;&stdio.h中GT;
#包括LT&;&CONIO.H GT;
#包括LT&;&文件ctype.h GT;
#定义UPPER([])([] -32)
无效fstring_convert(字符字符串[]);
无效的主要(无效)
{
字符字符串[40];
的printf(请输入一个字符串:);
得到(字符串);
fstring_convert(字符串);
的printf(%S,字符串);
残培();
}无效fstring_convert(字符字符串[])
{
INT I;
对于(i = 0;我+ +)
{
在(string [I] =='')
{
字符串[我] =字符串[我+ 1];
}
如果(ISDIGIT(字符串[我]))
{
字符串[I] + = 1;
}
([我]字符串')UPPER;
在(string [I] =='\\ 0')
打破;
}}
preprocessors没有循环。
因此,对于任意长度的字符串,你不能所有的字符转换为大写以preprocessor宏。
在code你有以上是越野车,因为您的宏应该是这样的:
的#define TOUPPER(x)x =(X> ='A'和;&安培; X< ='Z')(X-32):X;
然后调用 TOUPPER(字符串[我])
在为
循环。
但我看不到宏的点是什么。
i made a program which converts lower case to upper case a string.i know how to convert a char to upper case via preprocessor directives but i dont know how to do it for a string.
#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;
}
}
Preprocessors do not have loops.
Thus, for a string of arbitrary length, you cannot convert all characters to upper case with a preprocessor macro.
The code you have above is buggy because your macro should look like:
#define TOUPPER(x) x = (x>='a' && x<='z')?(x-32):x;
And then call TOUPPER(string[i])
in your for
loop.
But I don't see what the point of the macro is.
这篇关于不能转换成小写字母为大写由preprocessor指令串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!