C++如何限制用户输入仅含ATGC字符的核苷酸DNA序列?
C++ DNA序列输入合法性校验实现
你可以在原有代码基础上新增字符遍历校验逻辑,实现仅允许输入A/T/G/C字符的要求,修改后的完整代码如下:
#include <iostream> #include <string> // 如需支持小写字符自动识别可引入下面的头文件 // #include <cctype> using namespace std; int main () { string DNAsequence; cout<<"Enter the DNA sequence : "; cin>> DNAsequence; // 新增输入合法性校验 for (char c : DNAsequence) { // 如需支持小写atgc可将c替换为toupper(c) if (c != 'A' && c != 'T' && c != 'G' && c != 'C') { cout << "错误:输入内容包含非法字符,DNA序列仅允许由A、T、G、C四个字符组成" << endl; // 异常退出程序 return 1; } } cout<< "Your 5 to 3 DNA sequence is "<<DNAsequence << endl; return 0; }
改动说明
- 新增了全字符遍历校验逻辑,逐个判断输入的每个字符是否属于合法DNA字符集合
- 加入了错误提示分支:只要检测到1个非法字符就立刻抛出错误提示,终止程序运行
- 预留了小写字符兼容的优化方案,引入
<cctype>头文件后调用toupper()方法即可兼容用户输入小写atgc的场景 - 如需全中文交互,可直接替换对应输出内容,比如将输入提示改为
cout<<"请输入DNA序列:";
旧标准兼容方案
如果你需要兼容C++11之前的编译环境,可以将范围for循环替换为普通下标遍历逻辑:
for (int i = 0; i < DNAsequence.length(); i++) { char c = DNAsequence[i]; if (c != 'A' && c != 'T' && c != 'G' && c != 'C') { cout << "错误:输入内容包含非法字符,DNA序列仅允许由A、T、G、C四个字符组成" << endl; return 1; } }
内容的提问来源于stack exchange,提问作者waleed shoaib bajwa
相关产品推荐
相关产品推荐

