本文介绍了不能转换成小写字母为大写由preprocessor指令串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我犯了一个程序,它小写转换为大写一个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指令串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-01 23:09