【题目链接】
ybt 1135:配对碱基链
OpenJudge NOI 1.7 07:配对碱基链
【题目考点】
1. 字符串处理
字符处理有两种方法
- 每次读入一个字符,处理这一字符
char c;
while((c = getchar())!='\n')//若字符串不以换行符为结尾,而是读到输入文件的末尾,判断条件应写为:(c = getchar())!=EOF
{
//处理读取到的字符c
}
- 读入整个字符串,遍历字符串,处理各个字符
char s[100];//数组长度应大于字符串长度
cin>>s;//如果读入带空格字符串,应写为cin.get(s, 100)
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
//处理字符s[i]
}
【解题思路】
根据题意,DNA上A与T对应,G与C对应
遍历字符串,读到A,输出T;读到T,输出A。读到G,输出C,读到C,输出G。
【题解代码】
解法1:读入字符,处理字符
用if…else if语句,直接输出字符
#include <bits/stdc++.h>
using namespace std;
int main()
{
char c;
while((c=getchar())!='\n')
{
if(c == 'A')
cout<<'T';
else if(c == 'T')
cout<<'A';
else if(c == 'G')
cout<<'C';
else
cout<<'G';
}
return 0;
}
解法2:读入字符串,处理字符
用switch语句,构造字符串
#include <bits/stdc++.h>
using namespace std;
int main()
{
char s[260], r[260];
cin>>s;
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
switch(s[i])
{
case 'A':
r[i] = 'T';
break;
case 'T':
r[i] = 'A';
break;
case 'G':
r[i] = 'C';
break;
case 'C':
r[i] = 'G';
break;
}
}
r[len] = '\0';
cout<<r;
return 0;
}