首页 > 试题广场 >

字符串的反码

[编程题]字符串的反码
  • 热度指数:6653 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
    一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。如果这是一个小写字符,则它和字符'a’的距离与它的反码和字符'z’的距离相同;如果是一个大写字符,则它和字符'A’的距离与它的反码和字符'Z’的距离相同;如果不是上面两种情况,它的反码就是它自身。     举几个例子,'a’的反码是'z’;'c’的反码是'x’;'W’的反码是'D’;'1’的反码还是'1’;'$'的反码还是'$'。     一个字符串的反码定义为其所有字符的反码。我们的任务就是计算出给定字符串的反码。

输入描述:
    输入是一个字符串,字符串长度不超过 80 个字符。


输出描述:
输出其反码
示例1

输入

Hello

输出

Svool
示例2

输入

JLU-CCST-2011 

输出

QOF-XXHG-2011
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while ((s = br.readLine()) != null) {
            if (s.equals("!")) break;
            StringBuilder re = new StringBuilder("");
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (c >= 'a' && c <= 'z') {
                    re.append(fun(c));
                } else if (c >= 'A' && c <= 'Z') {
                    re.append(Fun(c));
                } else {
                    re.append(c);
                }
            }
            System.out.println(re);
        }

    }

    private static char fun(char c) {
        int t = c - 'a';
        return (char) ('z' - t);
    }

    private static char Fun(char c) {
        int t = c - 'A';
        return (char) ('Z' - t);
    }


}


发表于 2021-04-13 20:58:18 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String s = scanner.next();
            if (s.equals("!")){
                break;
            }else {
                StringBuilder builder = new StringBuilder();
                char[] array = s.toCharArray();
                for (char c : array) {
                    if (c >= 'a' && c <= 'z')
                        builder.append((char) ('z' - (c - 'a')));
                    else if (c>='A'&&c<='Z')
                        builder.append((char) ('Z' - (c - 'A')));
                    else 
                        builder.append(c);
                }
                System.out.println(builder.toString());
            }
        }
    }
}


发表于 2020-03-08 22:28:28 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder("");
        while(sc.hasNext()){
            String str = sc.nextLine();
            if('!' == str.charAt(0)){
                break;
            }
            char[] ch = str.toCharArray();
            for(int i=0;i<ch.length;i++){
                sb.append(rev(ch[i]));
            }
            System.out.print(sb);
        }
    }
    public static char rev(char c){
        if(c>='a' && c<='z'){
            return (char)('z'+'a'-c);
        }else if(c>='A' && c<='Z'){
            return (char)('A'+'Z'-c);
        }
        return c;
    }
}

发表于 2018-08-03 06:39:02 回复(0)

没有处理感叹号,就AC了。
但是处理一下也很简单,在reverse方法里加个else if()条件,判断下就行了,不过这里不是重点,重点是reverse方法上反码的实现。

import java.util.Scanner;

/**
 * @author Allen_Hua
 * @create_time 创建时间:May 12, 2018 7:28:49 PM 类说明
 */
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String str = scan.nextLine();
            char[] arr = str.toCharArray();
            for (int i = 0; i < arr.length; i++) {
                System.out.print(reverse(arr[i]));
            }
        }
    }

    private static char reverse(char c) {
        // TODO Auto-generated method stub
        if (c >= 'a' && c <= 'z') {
            return (char) ('a' + 'z' - c);
        } else if (c >= 'A' && c <= 'Z') {
            return (char) ('A' + 'Z' - c);
        } else {
            return c;
        }
    }
}
编辑于 2018-05-12 19:43:04 回复(0)