C++将字符串字符从下到高,从上到低

C++ convert string characters lower to upper and upper to lower

本文关键字:字符串 字符 C++      更新时间:2023-10-16

有人可以帮我写几行 c++ 代码来转换输入字符串字母,如下所示:

    小写字母
  1. 到大写字母。
  2. 大写字母
  3. 到小写字母。
  4. 不允许使用库函数。
  5. 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和函数的组合 touppertolower

编辑:对不起,错过了你的最后两点。您必须执行类似 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;

感谢您的尝试。