C++将字符串字符从下到高,从上到低
C++ convert string characters lower to upper and upper to lower
有人可以帮我写几行 c++ 代码来转换输入字符串字母,如下所示:
小写字母
- 到大写字母。
大写字母- 到小写字母。
- 不允许使用库函数。
- if 语句、比较、| 操作和不允许。
谢谢。
你可以写一个翻译数组(=map)。
a -> A
A -> a
b -> B
B -> b
...
z -> Z
Z ..Z
对于 ASCII,您可以将其实现为具有 128 个条目的char[]
,只需使用源的字符作为索引即可读取结果字符。
char translate[128];
translate['A']='a';
...
可能的实现:
// The following init-String is quite long (128 characters)!
char* translate=" abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
int i=0;
while(0!=s[i])
s[i] = translate[s[i++]];
如果您的输入是 ASCII,您可以简单地反转位 5,这意味着每个字符的值 32 或 xor。这会将小写转换为大写,反之亦然。
唯一的问题是它仅适用于 a-zA-Z,而不适用于其他任何内容。
您可以使用std::transform
和函数的组合 toupper
和 tolower
。
编辑:对不起,错过了你的最后两点。您必须执行类似 for 的循环,您可以使用三元运算符?
来避免 if 语句。一个可能的解决方案是:
for (unsigned i = 0; i < s.size(); ++i) {
s[i] = (s[i] >= 'a' && s[i] <= 'z') ? s[i] - 'a' + 'A' : s[i];
}
这样的东西会起作用,但前提是你有字母表
char c = 'a';
int e = c;
int d = e < 90 ? e + 32 : e - 32;
我的解决方案:正在寻找其他人。
string s;
cin>>s;
int a[3] = {'A', 'a', 'a'};
int A[3] = {'a', 'A', 'A'};
for (int i=0; i<s.size(); ++i)
s[i] = s[i] - a[(s[i]-'A')/26] + A[(s[i]-'A')/26];
cout << s << endl;
感谢您的尝试。
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 尝试将字符串/字符转换为整数会产生意外结果
- 为什么没有访问所有字符串字符?
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 如何将字符串字符与结构数组进行比较?
- 将单个字符串/字符输入串行监视器
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++ C 样式字符串/字符数组的大小 - 优化
- 读取字符串字符时出错
- C++ 使用 Strtok 读取字符串字符时出错
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 在另一个字符串中逐个复制字符串字符
- 将字符串字符映射到矢量
- MBED RTOS将Float转换为字符串/字符阵列
- 如何使用字符串字符数组中的 ++ 运算符访问下一个字符串
- 如何比较C++中的单个字符串字符?
- 内部字符串/字符如何在 int 和 float 中存储
- 将十六进制转换为可打印的字符串/字符
- wcscpy_s后读取字符串字符时出错
- 检查字符串字符和长度