Jua*_*ini 4 c++ arrays pointers dna-sequence
因此,我尝试创建序列TGAGACTTCAGGCTCCTGGGCAACGTGCTGGTCTGTGTGC的补码,但是我的输出未按预期工作。序列中每个字母的补码为
A-> T
G-> C
C-> G
T-> A
我从事Java编程已经有一年多了,所以我对C ++中的指针真的很生疏,我猜问题出在反向方法中,并且在每次调用函数时都改变了指针的方式
#include<stdio.h>
#include<iostream>
using namespace std;
void reverse(char s[]);
int main() {
char s[40] = {'T','G','A','G','A','C','T','T','C','A','G','G','C','T','C','C','T','G','G','G','C','A','A','C','G','T','G','C','T','G','G','T','C','T','G','T','G','T','G'};
cout << "DNA sequence: "<< endl << s << endl;
reverse(s);
cout << "Reverse Compliment: "<< endl << s << endl;
system("pause");
}
void reverse(char s[])
{
char c;
char *p, *q;
p = s;
if (!p)
return;
q = p + 1;
if (*q == '\0')
return;
c = *p;
reverse(q);
switch(c) {
case 'A':
*p = 'T';
break;
case 'G':
*p = 'C';
break;
case 'C':
*p = 'G';
break;
case 'T':
*p = 'A';
break;
}
while (*q != '\0') {
*p = *q;
p++;
q++;
}
*p = c;
return;
}
Run Code Online (Sandbox Code Playgroud)
标准的现代C ++使得这种底层的,面向指针的编程变得不必要了(实际上,您实际上是在编写C)。
一旦有了一个说complement将核苷酸转换成其互补序列的函数,您只需应用一些标准库函数即可transform。
这是C ++ 11中的程序重写:
#include <string>
#include <iostream>
#include <algorithm>
#include <cassert>
using namespace std;
char complement(char n)
{
switch(n)
{
case 'A':
return 'T';
case 'T':
return 'A';
case 'G':
return 'C';
case 'C':
return 'G';
}
assert(false);
return ' ';
}
int main()
{
string nucs = "ACAATTGGA";
transform(
begin(nucs),
end(nucs),
begin(nucs),
complement);
cout << nucs << endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |