PAT A1084 Broken Keyboard

本文详细解析了PATA1084 Broken Keyboard(同B1029)编程题的解决思路,通过比较两个字符串找出键盘上已损坏的按键,并提供了三种不同的代码实现方式,包括使用打表法(hash)和ctype.h库函数进行大小写转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PAT A1084 Broken Keyboard(同B 1029)

在这里插入图片描述

Sample Input:

7_This_is_a_test
_hs_s_a_es

Sample Output:

7TI
wordmeaning
worn out用坏(磨损)
being detected被发现
  • 思路 1:打表法(hash)
    两个指针同步遍历两个字符串,遇到不一样的开始处理:先把小写转大写,再c - '0',将字符转化为int映射到数组has[](初始化为0),若has[i] == 0打印出来,对应下标++;
  • code 1:
#include <string>
#include <iostream>
#include <stdio.h>
#include <cctype>	// *
using namespace std;
const int maxn = 128;
int has[maxn] = {0};
int main(){
	string s1, s2;
	cin >> s1 >> s2;
	int i = 0, j = 0;
	while(i != s1.size()){
		if(s1[i] == s2[j]){
			i++;j++;
		}
		else{
			if(islower(s1[i])) s1[i] = toupper(s1[i]);	//TIPS 1:
			int x = s1[i] - '0';
			if(has[x] == 0) printf("%c", s1[i]); 
			has[x]++;
			i++;
		}
	}
}
  • TIPS 1:
    ctype.h中的函数:
函数功能用法
islower(c)判断c是否是小写字母if(islower(c))
isupper(c)判断c是否是大写字母if(isupper(c))
toupper(c)将c转化为大写(!!:返回的是int型)char c = toupper(c)
tolower(c)将c转化为小写char c = tolower(c)
isalpha(c)大小写字母-
isalnum(c)大小写字母+数字-
isblank(c)space、\t-
isspace(c)space、\t、\r、\n-
  • T2 code:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 255;
bool has[maxn];

int main(){
	string ori, real;
	cin >> ori >> real;
	for(int i = 0; i < real.size(); ++i){
		int x = (int)real[i];
		if(islower(real[i])) real[i] = toupper(real[i]);
		has[x] = true;
	}
	for(int i = 0; i < ori.size(); ++i){
		int x = (int)ori[i];
		if(islower(ori[i])) ori[i] = toupper(ori[i]);
		if(has[x] == false){
			printf("%c", ori[i]);
			has[x] = true;
		} 
	}
	return 0;
} 
  • T3 code:
#include <bits/stdc++.h>
using namespace std;
bool has[300];
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    for(int i = 0; i < s2.size(); ++i)
    {
        char tmp = islower(s2[i]) ? toupper(s2[i]) : s2[i];
        has[tmp] = true;
    }

    for(int i = 0; i < s1.size(); ++i)
    {
        char tmp = islower(s1[i]) ? toupper(s1[i]) : s1[i];
        if(has[tmp] == false)
        {
            printf("%c", tmp);
            has[tmp] = true;
        }
    }
    return 0;
}

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
<think>好的,用户需要PAT乙级考试中C语言题目1084的解法。首先,我得确认这道题的具体内容。不过根据现有的引用资料,并没有直接提到1084题。不过,我可以根据已有的信息推测可能的解题思路。 用户提供的引用中,引用[3]提到了PAT乙级题解目录,面涉及字符串处理、字符数字转换、排序、查找截取等方法。这可能意味着题目1084可能涉及这些方面。比如,可能需要处理字符串转换、格式判断或者使用sscanf/sprintf等函数。 另外,引用[2]和引用[4]中的例子都是关于字符串处理的,比如条件判断、字符替换等。可能题目1084也涉及类似的字符串操作。例如,可能需要分析输入格式,按照特定规则转换或验证字符串。 考虑到PAT乙级题目通常要求明确的输入输出格式,我会建议用户先明确题目要求的具体规则,然后分步骤实现。例如,如果是类似“我要通过”这样的条件判断题,可能需要逐步解析条件,使用循环和条件语句来处理每个字符或子串。 另外,引用[3]中提到使用sscanf和sprintf进行格式判断,这可能适用于需要解析特定格式输入的题目。比如,判断输入字符串是否符合某种模式,然后进行相应的处理。 由于缺乏具体的题目描述,可能需要用户提供更多细节,但根据常见的PAT乙级题型,可能的解法包括字符串分割、条件判断、递归或迭代处理。代码结构可能涉及读取输入,处理字符串,应用特定规则,然后输出结果。 最后,建议用户参考类似题目的解法,如引用[2]和引用[4]中的方法,结合字符串处理函数和逻辑判断来实现题目要求。</think>关于PAT乙级1084题(题目名称未明确),根据现有引用资料推测可能属于字符串处理类题目。以下是结合PAT乙级常见题型的通用解法思路及代码框架: ### 解法思路 1. **输入格式分析** 先读取字符串或数字输入,可能需要处理包含字母、数字的特殊组合格式(如引用[2]中类似`aPbATca`的规则判断)[^2] 2. **核心规则解析** - 若题目涉及字符串转换规则,建议使用`sscanf/sprintf`进行格式判断(如引用[3]提到的格式验证方法)[^3] - 可能需要递归处理字符串中的特定模式(如快速排序的分治思想,但应用于字符串操作) 3. **实现步骤** ```c #include <stdio.h> #include <string.h> int main() { char input[1000], output[2000]; scanf("%s", input); // 假设输入为单个字符串 // 核心处理逻辑(示例:字符替换+格式转换) int j = 0; for(int i = 0; input[i]; i++) { if(input[i] == 'A') { // 假设题目要求转换A字符 output[j++] = 'B'; output[j++] = 'C'; } else { output[j++] = input[i]; } } output[j] = '\0'; printf("%s", output); return 0; } ``` ### 关键点提醒 1. **字符串缓冲区** 若涉及多层转换,建议使用双指针法或创建临时缓冲区(如示例中的`output`数组) 2. **特殊格式验证** 若题目要求类似引用[2]中的复杂条件判断,可采用: ```c char a[100], b[100], c[100]; if(sscanf(input, "%[A]P%[A]T%[A]", a, b, c) == 3) // 格式匹配验证 ``` 3. **效率优化** 对于大数据量,推荐使用`O(n)`时间复杂度算法,避免嵌套循环(参考快速排序的分治思想应用)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值