C ++将字符串字符从低到高,从高到低转换

时间:2013-09-19 11:41:24

标签: c++ algorithm

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

  
      
  1. 小写字母到大写字母。
  2.   
  3. 大写字母到小写字母。
  4.   
  5. 不允许使用库函数。
  6.   
  7. if statement,comparisons,|操作和&不允许。
  8.   

感谢。

5 个答案:

答案 0 :(得分:4)

您可以编写翻译数组(= map)。

a - >一个
A - >一个
b - >乙
B - > b
...
z - > ž
Z .. z

对于ASCII,您可以将其实现为具有128个条目的char[],并且只需使用source的字符作为索引来读取结果字符。

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++]];

答案 1 :(得分:3)

如果输入为ASCII,则可以简单地将第5位反转,这意味着每个字符的值为x或32。这会将小写转换为大写,反之亦然。

唯一的问题是它只适用于a-zA-Z而不适用于其他任何内容。

答案 2 :(得分:2)

您可以结合使用std::transformtoupper以及tolower功能。

编辑:抱歉错过了你的最后两分。您必须执行类似for的循环,并且可以使用三元运算符?来避免if语句。一个可能的upcase解决方案是:

for (unsigned i = 0; i < s.size(); ++i) {
  s[i] = (s[i] >= 'a' && s[i] <= 'z') ? s[i] - 'a' + 'A' : s[i];
}

答案 3 :(得分:0)

这样的东西可行,但只有你有字母

        char c = 'a';
        int e = c;
        int d = e < 90 ? e + 32 : e - 32;

答案 4 :(得分:0)

我的解决方案:正在寻找其他人。

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;

感谢您的尝试。