我发现了很多关于字母从小写到大写转换的问题,反之亦然,但我有一个稍微不同的问题:
我想要写一个程序,以.txt文件作为输入,读取它们并检测文本中字符从大写到小写的所有位置。例如,读取输入文件:
测试AJHFOJEOJkljklfjddejhjhoIOJOJFOJlkmlkloisjdo...:input.txt
程序会告诉我,在10和30位置,文本从上到下转换为小写。
我知道,这在普通英语文本中是没有意义的,因为文本不会经常从上到下变化。然而,我的程序不应该阅读用英语写的文本,而是包含DNA序列的文本,其中一个基因的所有外显子都用大写字母写,所有内含子都用小写写。简单地说,我的程序应该把DNA序列作为输入(作为.txt文件),然后告诉我外显子与内含子相邻的所有位置。
在下一步中,程序应该输出并进一步处理它在第一步中检测到的所有位置的最后三个大写字母和前六个小写字母。因此,对于上面显示的测试input.txt,它将输出:
EOJkljklf和FOJlkmlkl
这个程序的目的是在我作为.txt文件提供的任何基因中找到所有所谓的‘剪接供体位点’,然后进一步分析它们。
(技术术语:剪接供体位点是一个mRNA转录子的外显子/内含子边界上的9个碱基的序列,外显子的最后三个碱基和下一个内含子的前六个碱基,U1 snRNA结合并启动剪接过程)。
发布于 2017-08-11 16:23:27
我假设您在Linux环境中,并且在命令行终端上使用该程序。
以下是一个简单的解决方案:
#include <fstream>
#include <iostream>
int main (int argc, char **argv) {
int i, line_size;
std::ifstream myfile;
std::string token;
// Check if user put an input file as argument
if(argc < 2){
std::cout << "Usage : ./parser filename" << std::endl;
return 0;
}
// Open file and check for errors
myfile.open(argv[1]);
if(!myfile){
std::cout << "Error opening file" << std::endl;
return -1;
}
// For each line, put the line in variable token
while(getline(myfile, token)){
line_size = token.size();
for(i=2; i < line_size - 4; ++i){
// Go through the line and check for each character if it
// is an uppercase character and if the following one is
// a lowercase character. If so, print it.
if(std::isupper(token[i]) && std::islower(token[i+1])){
std::cout << token.substr(i-2, 6) << std::endl;
}
}
}
myfile.close();
return 0;
}https://stackoverflow.com/questions/45636510
复制相似问题