「Mac玩转仓颉内测版20」PTA刷题篇11 - L1-011 A-B

2024-11-18 20:09:09
9次阅读
0个评论
最后修改时间:2024-11-19 20:55:24

本篇将继续讲解PTA平台上的题目 L1-011 A-B,通过对两个字符串进行处理,将字符串 A 中所有在字符串 B 中出现的字符删除,进一步提升Cangjie编程语言的字符串操作与逻辑处理能力。


关键词
  • PTA刷题
  • 字符串处理
  • 条件判断
  • Cangjie语言

一、L1-011 A-B

题目描述:给定两个字符串 AB,将字符串 A 中所有出现在字符串 B 中的字符删除,剩下的字符即为 A-B 的结果。

  • 输入格式:输入在两行中给出字符串 AB。两个字符串的长度都不超过 10^4,并且保证每个字符串都是由可见的ASCII码和空白字符组成。

  • 输出格式:在一行中打印出 A-B 的结果字符串。


解题思路
  1. 字符过滤:遍历字符串 A,检查每个字符是否出现在字符串 B 中,如果不在 B 中则保留,否则删除。
  2. 字符数组处理:将字符串 B 转换为字符数组,方便进行字符查找和过滤。
  3. 格式化输出:最终将处理后的字符串通过拼接输出。

代码实现
package cjcDemo

import std.console.*
import std.collection.*

// 计算 A - B
func subtractStrings(A: String, B: String): String {
    let charsToRemove = B.toArray()
    var result = StringBuilder()  // 用于存储结果

    // 遍历字符串 A,过滤掉出现在 B 中的字符
    for (ch in A) {
        if (!charsToRemove.contains(ch)) {
            result.append(Rune(ch))
        }
    }

    return result.toString()
}

main(): Int64 {
    // 输入字符串 A 和 B
    let A = Console.stdIn.readln().getOrThrow()
    let B = Console.stdIn.readln().getOrThrow()

    // 计算 A - B
    let result = subtractStrings(A, B)

    // 输出结果
    println(result)

    return 0
}

代码详解
  1. 字符数组处理:使用 toArray() 方法将字符串 B 转换为字符数组,方便进行字符的查找和过滤。
  2. 结果存储:通过 StringBuilder 来构建结果字符串,避免直接拼接字符串带来的性能开销。
  3. 字符过滤:在遍历字符串 A 时,检查字符是否存在于 B 中的字符数组中。如果字符不存在于数组中,则将其添加到结果字符串中。
  4. 最终输出:处理完成后,输出删除 B 中字符后的 A 字符串。

示例执行

示例 1
输入:

I love GPLT!  It's a fun game!
aeiou

输出:

I lv GPLT!  It's  fn gm!

示例 2
输入:

abcdefg
bdf

输出:

aceg

小结

本篇通过实现 L1-011 A-B 题目,提升了对字符串处理的能力。通过将字符串 B 转换为字符数组并通过遍历 A 进行过滤操作,成功实现了从 A 中删除 B 中字符的功能。


下篇预告

下一篇将正式进入基础篇,讲解Cangjie语言中的程序基本组成部分,敬请期待 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成


上一篇: 「Mac玩转仓颉内测版19」PTA刷题篇10 - L1-010 比较大小

下一篇: 「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成


作者:SoraLuna 链接:https://www.nutpi.net 來源:坚果派 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


收藏00

登录 后评论。没有帐号? 注册 一个。