C - 如何检查不需要的字符是否在数组中?

标签 c arrays string character

我有一个关于字符串数组的问题。

我正在尝试找到一种方法来检查字符串中是否包含不需要的字符。

测试数组必须只包含这 8 个选项之一:{'A','a','C','c','G','g','T','t'}

在此检查过程之前删除所有空格。

如果我有两个数组 A = {AGctcgtacgtacg} B = {CGTAagctFcg}

A 应该通过测试,而 B 应该失败,因为其中有“F”。

我正在考虑使用 for 循环遍历数组的每个元素并尝试检查该字符是否是选项之一。

const char test[] = {'A','a','C','c','G','g','T','t'};
int l = strlen(A);
char A[] = {AGctcgtacgtacg} 
char B[] = {CGTAagctFcg}
for (i = 0; i < l; i++){
    if (A[i] is one of the characters in test){
        do nothing... (keep checking)
    }
    else{
    break;
    printf("Error: the array contains unwanted character.");
    exit(1);
    }
}

最佳答案

您可以使用标准 C 函数 strspn在 header 中声明 <string.h>检查字符串是否仅包含有效字符。

例如

#include <stdio.h>
#include <string.h>

int main( void )
{
    const char *test = "AaCcGgTt";
    char A[] = "AGctcgtacgtacg";
    char B[] = "CGTAagctFcg";

    if (A[strspn(A, test)] == '\0')
    {
        puts("Array A has valid characters");
    }
    else
    {
        puts("Array A has invalid characters");
    }

    if (B[strspn(B, test)] == '\0')
    {
        puts("Array B has valid characters");
    }
    else
    {
        puts("Array B has invalid characters");
    }
}

程序输出为

Array A has valid characters
Array B has invalid characters

如果您还需要知道第一个无效字符的位置,那么您可以这样写

#include <stdio.h>
#include <string.h>

int main()
{
    const char *test = "AaCcGgTt";
    char A[] = "AGctcgtacgtacg";
    char B[] = "CGTAagctFcg";
    size_t n;

    if (A[n = strspn(A, test)] == '\0')
    {
        puts("Array A has valid characters");
    }
    else
    {
        puts("Array A has invalid characters");
        printf("Invalid character is %c at position %zu\n", A[n], n);
    }

    if (B[n = strspn(B, test)] == '\0')
    {
        puts("Array B has valid characters");
    }
    else
    {
        puts("Array B has invalid characters");
        printf("Invalid character is %c at position %zu\n", B[n], n);
    }
}

程序输出为

Array A has valid characters
Array B has invalid characters
Invalid character is F at position 8

关于C - 如何检查不需要的字符是否在数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42562265/

相关文章:

c - 文件无限地接受输入

javascript - 数组名称可以被视为变量吗

java - 正则表达式 - 从字符串确定矩阵

javascript - 将数组名称作为字符串传递,jquery

c - 使用 open()、read() 和 write() 写入坏数据

c - c中的fprintf输出错误

检查recvfrom() 中的返回地址(C UDP 套接字)

Java:如何测试数组相等性?

java - 返回字符串数组中的单词

javascript - 如何使用 jQuery 删除字符串中的句点