P1093 字符串A+B
2024-09-04 00:36:10
1093 字符串A+B (20分)
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 1的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 A 和 B 的和。
输入样例:
This is a sample test
to show you_How it works
输出样例:
This ampletowyu_Hrk
我战战兢兢 的 写了一个 while (~scanf("%c", &ch)) ,居然还真的A了,つ﹏⊂,我拿了一个128大小的数组当作去重的数组,凡是输入过的字符都会被标记,第二次输入的时候都会被跳过,不过需注意的是 '\0' 和 '\n' 需要特殊处理,要不然就有可能会出现输出不完全的情况或者换行输出的情况。还有就是记得给字符数组初始化,要不然就得一个个%c输出,不过这种代码没多大通用性
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1000000 int main(void)
{
char ch;
int count = ;
int flag[] = {};
char str[MAX_SIZE] = {}; flag[(int)'\n'] = ;
while (~scanf("%c", &ch))
{
if (flag[(int)ch])
{
continue;
}
flag[(int)ch] = ;
str[count++] = ch;
} printf("%s\n", str); return ;
}
2020-02-15 11:36:51更新:
好吧,我觉得这样子更U•ェ•*U一点
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int flag[] = {};
char c;
for (int i = ; i < ; i++)
{ //两个字符串,所以循环两次
while ((c = getchar()) != '\n')
{ //用输入是否为'\n'来判断字符串输入是否结束
if (flag[(int)c] == )
{
flag[(int)c] = ;
printf("%c", c);
}
}
}
return ;
}
干脆,数组也不要,直接裸奔,跑完就输出完了。(完了我又想到RTT了)
PAT不易,诸君共勉!
最新文章
- JVM内存管理------杂谈(借此也论一论obj=null)
- oracle中的exists 和not exists 用法详解
- Oracle数据库程序包全局变量的应用
- BZOJ 1028: [JSOI2007]麻将 暴力
- Oracle性能调优(AWR)
- HTML基本介绍
- thinkphp中find()和select()的区别
- ThinkPHP中,display和assign用法详解
- javascript学习日志:前言
- H5 音频标签自定义样式修改以及添加播放控制事件
- 优秀代码摘录片段一:LinkedList中定位index时使用折半思想
- 两个VirtualBox版本装的语言不一样?
- 4.1.6 Grundy数-硬币游戏2
- C#生成带Logo二维码
- html03
- Spring boot 注解简单备忘
- Java线程池相关类-Executor框架
- 【js】with 语句
- HDU 4489(DP)
- React Native开发环境的搭建