【PAT乙级】1093 字符串 A+B (20 分) C语言实现
作者:互联网
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。
输入格式:
输入在两行中分别给出 A 和 B,均为长度不超过 10^6 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。
输出格式:
在一行中输出题面要求的 A 和 B 的和。
输入样例:
This is a sample test
to show you_How it works
输出样例:
This ampletowyu_Hrk
代码实现:
- 解法一:
#include <stdio.h>
#include <string.h>
void get_string(char *pa, int len) {
// 获取输入的字符串
fgets(pa, len, stdin);
if (pa[strlen(pa) - 1] == '\n') { // 找到 输入字符串 中的最后一个字符
pa[strlen(pa) - 1] = '\0'; // 如果是回车符,就把它改为 '\0'
}
}
void pick_unique_char_arr(char *source_arr, char *result_arr, int *index) {
// 将源数组的元素提取到目标数组中
int n = *index;
for (int i = 0; source_arr[i] != '\0'; i++) {
int isExist = 0;
for (int j = 0; j < n; j++) {
if (source_arr[i] == result_arr[j]) {
isExist = 1;
}
}
if (isExist == 0) {
result_arr[n] = source_arr[i];
n++;
}
}
*index = n;
}
int main() {
char a[1000002], b[1000002];
get_string(a, 1000002);
get_string(b, 1000002);
char result[100] = {'\0'};
int n = 0;
pick_unique_char_arr(a, result, &n);
pick_unique_char_arr(b, result, &n);
printf("%s\n", result);
return 0;
}
- 解法二:
#include <stdio.h>
#include <string.h>
void get_string(char *pa, int len) {
// 获取输入的字符串
fgets(pa, len, stdin);
if (pa[strlen(pa) - 1] == '\n') { // 找到 输入字符串 中的最后一个字符
pa[strlen(pa) - 1] = '\0'; // 如果是回车符,就把它改为 '\0'
}
}
int main() {
int len = 1000002;
char a[len], b[len];
// 获取输入的字符串
get_string(a, len);
get_string(b, len);
// 字符作为数组下标,数组的值为 1 或 0 辨别当前字符是否重复;若当前字符未重复,则输出。
int result_arr[256] = {0};
for (int i = 0; i < strlen(a); i++) {
// 字符 'a' == 97,隐式转换可能会存在其他问题
if (result_arr[a[i]] == 0) {
printf("%c", a[i]);
result_arr[a[i]] = 1;
}
}
for (int i = 0; i < strlen(b); i++) {
if (result_arr[b[i]] == 0) {
result_arr[b[i]] = 1;
printf("%c", b[i]);
}
}
printf("\n");
return 0;
}
标签:arr,20,1093,int,len,C语言,char,pa,result 来源: https://www.cnblogs.com/wanghuizhao/p/16312222.html