蓝桥杯 算法训练 P0701(Java)

编写一个函数RegularPlural,其功能是实现一个英文单词的复数形式。复数的规则为:
  (1) 如果单词末尾为s,x,z,ch或sh,则在后面加es
  (2) 如果单词末尾为y,且前一个字母为辅音(除a, e, i, o, u以外的其它情况),则把y改成ies。
  (3) 如果是其它情形,一律在后面加s。
  编写测试程序,输入一个长度小于20的单词,输出该单词的复数形式。
输入:
  box
输出:
  boxes

思路:

  1. 准备三个char类型数组

①将输入的String类型转换成为char类型数组

②第二个数组则使用在满足第二个条件后重新组合

③第三个则是存储判断除去5个元音外的其他辅音字母。

  1. 第一点和第三点我们可以直接进行if(判断即可)如果满足,直接使用return退出当前方法。

  1. 而第二点才是本道题考察的重点,一开始我是这样想的

word[word.length-1]=='y' && (word[word.length-2] != 'a' ||word[word.length-2] != 'e' ||word[word.length-2] != 'i' ||word[word.length-2] != 'o' || word[word.length-2] != 'u'))

很明显这条语句是存在问题的,因为它不能实现执行了第一条就退出。

  1. 后来我转换了思路,我们可以通过ASCII码存入21个辅音字母,然后在和倒数第二个字母一一比对,当符合条件的进行处理后退出即可!

  1. 当然我们也可以使用5个独立的if语句,但是每个里面都要写转换格式。

完整代码:



import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String wordStr = scan.nextLine();


        RegularPlural(wordStr);

    }

    public static void RegularPlural(String wordStr){
        char[] word = wordStr.toCharArray();
        char[] newWord = new char[word.length - 1];
        char[] keyValue = new char[125];

        for (int i = 98 ; i < 101; i++){
            keyValue[i] = (char) i;
        }

        for (int i = 102 ; i < 105; i++){
            keyValue[i] = (char) i;
        }

        for (int i = 106 ; i < 111; i++){
            keyValue[i] = (char) i;
        }

        for (int i = 112 ; i < 117; i++){
            keyValue[i] = (char) i;
        }

        for (int i = 118 ; i < 123; i++){
            keyValue[i] = (char) i;
        }


        if (word[word.length-1]=='s' || word[word.length-1]=='z' || word[word.length-1]=='x' ||
                (word[word.length-1]=='h'&&word[word.length-2]=='s') ||  (word[word.length-1]=='h'&&word[word.length-2]=='c')){
            System.out.println(wordStr + "es");
            return;
        }
        if(word[word.length-1]=='y') {

            for (int i = 98; i < keyValue.length; i++){
                if (word[word.length - 2] == keyValue[i]){

                    for (int j = 0 ; j < word.length - 1; j++){
                        newWord[j] = word[j];
                    }
                    String newWordStr = String.valueOf(newWord);
                    System.out.println(newWordStr + "ies");
                    return;

                }
            }


        }
            System.out.println(wordStr + "s");

    }
}

测试结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luca-s-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值