编写宏函数来更改字符串的大小写?
Write a macro function to change the case of a string?
//我试过这段代码
#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;
}
你似乎if
了,ifdef
困惑了。ifdef
用于测试以前是否定义了宏,并基于该定义启用功能。请参阅此问题:#ifdef 和 #ifndef 的作用
相反,您正在尝试基于运行时测试执行特定代码段。为此,您需要if
。
如注释中所述,当您应该编写函数时,编写宏通常被认为是不好的做法。C 语言中的宏与函数
#ifdef (str[i]>='a' && str[i]<='z')
应该是
if (str[i]>='a' && str[i]<='z')
#ifdef
没有意义,因为str[i]
必须在运行时计算,而宏预处理器仅在编译时工作。
此外,#elifdef
也不是合法的代币。出于与上述类似的原因,这应该else if
。
您可以使用此代码。我想它会帮助你
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define CASE_CHANGE(str) ({
int i = 0;
string op = "";
while (str[i] != ' ') {
if (isupper(str[i])) {
op += tolower(str[i]);
}
else {
op += toupper(str[i]);
}
++i;
}
op;
})
int main() {
cout << CASE_CHANGE("babu");
}
相关文章:
- 编写宏函数来更改字符串的大小写?
- 如何执行不区分大小写的字符串比较?
- 对字符串向量进行排序,但不区分大小写
- 如何创建一个程序来标识最长的子字符串回文,而不考虑字母大小写
- 哈希字符串更改大小写
- 在字符串的 boost::unordered_set 中使用 Lambda 函数 - 不区分大小写
- 开关大小写语句中函数中的字符串输入会导致无限循环和绕过输入
- 比较字符串大小写不区分的简单方法是什么?
- 使用 std::string 返回开关大小写块中的字符串常量
- 如何使字符串中的每个字母不区分大小写
- 不区分大小写的字符串
- 是否有函数/WinAPI 可以判断一个字符串是否以不区分大小写的语言方式以另一个字符串开头?
- 使用 map<string,int> 在开关大小写语句中使用字符串
- 处理从 std::istream 中提取字符串的空字符串大小写
- C++大小写中的类型转换常量字符串
- C++,检查两个字符串的不区分大小写相等
- 在字符串向量中查找字符串,不区分大小写的c++
- 如何按大小写顺序排列字符串(而不是按字典顺序排列)
- 内置C++函数,使两个字符串的比较不区分大小写
- 用于转换字符串大小写的函数