C语言-基因序列转换独热码(one-hot code)

embedded/2024/12/26 12:36:42/

1.题目要求

(语言: C)在生物信息学家处理基因序列时,经常需要将基因序列转化为独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。
如基因序列有四种状态,ATCG。分别可以转化为0001,0010,0100,1000。
如果遇到其他字符,则转化为0000。如遇到atcg,也转化为0001,0010,0100,1000。
请一次性输入若干段序列,并输入这些序列的独热码。(因段数以及序列长度不确定,需要使用动态数组,测试用例中每行长度不超过20)如
输入:
2
ATCG
AAAA
输出:
0001001001001000
0001000100010001

2.代码实现 

1.方法一(二维数组)

比较科学且正常的做法

#include <stdio.h>
#include <string.h>void convert(char *sequence, char result[][5]);int main() {int n;scanf("%d", &n);char sequences[20][20];char results[20][20 * 4];for (int i = 0; i < n; i++) {scanf("%s", sequences[i]);convert(sequences[i], (char (*)[5])results[i]);printf("%s\n", results[i]);}return 0;
}
void convert(char *sequence, char result[][5]) {int len = strlen(sequence);for (int i = 0; i < len; i++) {switch (sequence[i]) {case 'A':strcpy(result[i], "0001");break;case 'T':strcpy(result[i], "0010");break;case 'C':strcpy(result[i], "0100");break;case 'G':strcpy(result[i], "1000");break;default:strcpy(result[i], "0000");}}
}

2.方法二(一维数组) 

纯属瞎捣鼓,不建议......

#include<stdio.h>
#include<stdlib.h>int main()
{int n;int count = 0;// 提示输入要处理的序列数量printf("请输入要处理的序列数量:");scanf("%d", &n);// 提示输入 n 段基因序列printf("请输入%d段基因序列:\n", n);char *array = (char *)malloc(n * 21 * sizeof(char));for (int i = 0; i < n * 20; i++) {scanf("%c", &array[i]);if (array[i] == '\n') {array[i] = '0';count++;}if (count > n) {break;}}int countPRO = 0;// 输出独热码的提示printf("独热码如下:\n");for (int i = 0; i < n * 20; i++) {if (array[i] == 'A' || array[i] == 'a') {printf("0001");} else if (array[i] == 'T' || array[i] == 't') {printf("0010");} else if (array[i] == 'C' || array[i] == 'c') {printf("0100");} else if (array[i] == 'G' || array[i] == 'g') {printf("1000");} else if (array[i]!= '0') {printf("0000");} else {if (i!= 0 && countPRO!= n) {printf("\n");}countPRO++;}if (countPRO > n) {break;}}free(array);return 0;
}


http://www.ppmy.cn/embedded/148892.html

相关文章

云手机服务器如何做到群控多台手机的?

亚矩阵云手机服务器解决方案是基于ARM集群芯片和虚拟化技术的一站式解决方案&#xff0c;具有高性能&#xff0c;高集成度的特点&#xff1b;支持一键操控、应用多开、真机检测等功能&#xff1b;广泛适用于舆情监测、海外推广、APP检测、政务云手机等场景。 亚矩阵云手机服务器…

Java学习笔记(16)--面向对象编程

学习资料来自接口 - Java教程 - 廖雪峰的官方网站 面向对象基础 目录 面向对象基础 接口 定义 术语 接口继承 继承关系 default方法 default方法和抽象类的普通方法的区别&#xff1a; 练习 小结 接口 定义 如果一个抽象类没有字段&#xff0c;所有方法都是抽象方…

华三M-LAG场景下,部分MAC内的流量泛洪导致端口流量打满

互联网各领域资料分享专区(不定期更新)&#xff1a; Sheet 问题描述 华三M-LAG场景下&#xff0c;部分MAC内的流量泛洪导致端口流量打满 解决方案 在交换机设备上创建1个无用的聚合口&#xff0c;该聚合口加入到mlag组&#xff0c;并将异常泛洪的MAC加入到该接口即可解决。&…

拆解Java中——“ 注解 ”和“ 注释 ” 的一切区别Ⅱ

前言&#xff1a; 上一篇&#xff0c;我们讲到了&#xff1a; ①注解的引入&#xff08;简单概述&#xff09;&#xff1a;在jdk5.0的时候 ②注解与注释的区别&#xff1a; 注释 是为了帮助人类阅读代码&#xff0c;不会对程序的执行产生任何影响。注解 是为了给编译器或运行…

[react]5、React脚手架

1、前端脚手架 1、Vue的脚手架&#xff1a;vue-cli 2、Angular的脚手架&#xff1a;angular-cli 3、React的脚手架&#xff1a;create-react-app 目前这些脚手架都是使用node编写的&#xff0c;并且都是基于webpack的&#xff0c;需要在电脑上安装node环境 脚手架的作用是帮助我…

微信小程序性能优化

性能优化是任何应用开发中的重要组成部分&#xff0c;尤其是在移动环境中。对于微信小程序而言&#xff0c;随着用户量的增加和应用功能的丰富&#xff0c;性能优化显得尤为关键。良好的性能不仅提升用户体验&#xff0c;还能增加用户留存率和应用的使用频率。我们将探讨如何在…

12寸半导体厂等保安全的设计思路

等级保护(等保)二级和三级的主要区别在于安全要求的严格程度、所需部署的安全措施和设备、以及对安全事件响应和处理的能力。以下是等保二级和三级之间的一些关键区别: 一、 安全要求严格程度: - 等保二级:适用于需要较高安全保护的信息系统,要求能够防范轻微的恶意攻击…

数组类算法 - 合集

************* C topics include&#xff1a; 数组类算法 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 26. 删除有序数组中…