【发布时间】:2020-10-10 09:43:46
【问题描述】:
// 我试过这段代码
#include<iostream>
using namespace std;
// 字符转换函数 // 一个字符串到相反的大小写
#define case_change(str)\
{\
int ln = str.length();\
//根据ASCII值进行转换
#define for (int i=0; i<ln; i++)\
{\
#ifdef (str[i]>='a' && str[i]<='z'){\
str[i] = str[i] - 32;\
#endif}
//Convert lowercase to uppercase
#elifdef (str[i]>='A' && str[i]<='Z')\{\
str[i] = str[i] + 32;\
#endif}\
//Convert uppercase to lowercase
#endif}
}
// 驱动函数
int main()
{
string str = "GeEkSfOrGeEkS";
// Calling the Function
case_change(str);
cout << str;
return 0;
}
【问题讨论】:
-
不要使用宏。改写一个函数。
-
欢迎堆栈溢出。您可能想查看help section 以了解有关编写好问题的更多信息。特别是,我们需要描述您尝试运行代码时出了什么问题。
-
没有宏函数这样的东西。有宏,也有函数。 99.999% 的时间你应该更喜欢一个函数。
-
我根本不会尝试在 C 或 C++ 中为此使用宏。但是,在 C++ 中,如果您固执地坚持使用宏,并且假设您能够使用标准头文件
<cctype>,那么#define case_change(str) std::transform(std::begin(str), std::end(str), [](int x) -> int {return std::tolower(x) ? std::toupper(x) : (std::toupper(x) ? std::tolower(x) : x);})就会这样做。请注意,这不依赖于使用 ASCII 表示的字符。它也适用于编译器可以检测开始和结束的任何char集合,而不仅仅是字符串。 -
@john -- 标准定义了“类函数宏”;它们通常被非正式地称为“宏功能”。
标签: c++ c string macros preprocessor