如果用户输入ACGT以外的任何字符(顺序无关紧要),则应打印“INVALID”。用户只需输入不超过250个字符的序列。
#include <stdio.h>
#include <string.h>
int main(void)
{
char dna[250];
int i;
for(i=0; i<250; i++)
{
scanf("%c", dna[i]);
}
fgets(*dna, 250, scanf("%c", dna));
int k;
for(k=0; k<250; k++)
{
if(dna[k] == 'A' || 'C' || 'G'|| 'T')
{
i++;
//printf("%c\n", dna[0])
}
}
if(i > 0)
{
printf("VALID sequence \n");
}
else
{
printf("INVALID sequence \n");
}
}
答案 0 :(得分:1)
#include <stdio.h>
int main(void){
char dna[250+1], rest;
if(scanf("%250[ACGT]%c", dna, &rest) == 2 && rest == '\n')
printf("VALID sequence \n");
else
printf("INVALID sequence \n");
}
答案 1 :(得分:0)
有很多方法可以解决这个问题。您可以对显示的字符类使用scanf
,也可以使用任何其他方法来读取输入(例如getchar
,fgets
,POSIX getline
),然后简单地分析为"ACGT"
以外的任何内容输入的字符。
此外,在您的问题陈述中,您声明“用户只是不断输入不超过250个字符的序列”。显然,您需要循环来处理多个字符串的输入,但除此之外,您还需要保护并处理大于250
个字符的任何字符串的剩余部分。目前还不清楚是否要保留输入的前250个有效字符(看起来是合乎逻辑的),然后丢弃任何超过250个字符的限制。
在使用面向字符的输入(例如使用getchar
)的情况下,用于验证输入的工具只是检查针对ACGT
的每个字符输入。当使用面向行的输入时(例如fgets
或getline
),C库提供了许多工具来检查字符串中的字符或字符串中的子字符串( strchr
适用于此处)或者您可以简单地将指针向下移动检查每个字符的整个输入字符串。 (您还需要检查并删除'\n'
面向行的函数read 并在缓冲区中包含)
使用fgets
作为输入和strchr
将这些部分组合成一个简短示例,以检查每个字符是否为ACGT
之一,您可以执行以下操作。这里用户可以根据需要输入任意数量的字符串。读取EOF
时程序终止(在Linux上用 Ctrl + D 手动生成,在windoze上用 Ctrl + Z 手动生成)。如果输入的字符串无效,则代码将标识条目中第一个无效字符的位置:
#include <stdio.h>
#include <string.h>
#define MAXC 250
int main (void) {
char str[MAXC+1] = "", *valid = "ACGT";
printf ("Enter sequences [ctrl+d] to quit:\n");
while (fgets (str, MAXC+1, stdin)) /* read input */
{
size_t len = strlen (str), good = 1; /* get length, set flag */
char *p = str; /* pointer to str */
int c;
if (str[len-1] == '\n') /* trim '\n' char */
str[--len] = 0; /* overwrite with nul */
else /* line > 250, discard extra */
while ((c = getchar()) != '\n' && c != EOF) {}
for (; *p; p++) /* for each char in str */
if (!strchr (valid, *p)) { /* check against valid */
good = 0; /* not found - invalid */
break;
}
if (good)
printf ("VALID\n");
else
fprintf (stderr, "INVALID ('%c' at character '%ld'\n", *p, p - str);
}
return 0;
}
示例使用/输出
$ ./bin/acgtvalid
Enter sequences [ctrl+d] to quit:
ACGTTTGGCCCATTAGGC
VALID
ACCGGTTCCGGAITT
INVALID ('I' at character '12')