c - 在 Char 数组中查找字符串值

标签 c arrays char

我有一个作业,需要在我拥有的数组中查找子字符串。

这是我的数组:

char DNA[] = {'A', 'G', 'C', 'G', 'G', 'G', 'A', 'C', 'C', 'G', 'T', 'C', 
      'C', 'C', 'G', 'A', 'C', 'A', 'T', 'T', 'G', 'A', 'T', 'G', 
      'A', 'A', 'G', 'G', 'G', 'T', 'C', 'A', 'T', 'A', 'G', 'A', 
      'C', 'C', 'C', 'A', 'A', 'T', 'A', 'C', 'G', 'C', 'C', 'A', 
      'C', 'C', 'A', 'C', 'C', 'C', 'C', 'A', 'A', 'G', 'T', 'T', 
      'T', 'T', 'C', 'C', 'T', 'G', 'T', 'G', 'T', 'C', 'T', 'T', 
      'C', 'C', 'A', 'T', 'T', 'G', 'A', 'G', 'T', 'A', 'G', 'A', 
      'T', 'T', 'G', 'A', 'C', 'A', 'C', 'T', 'C', 'C', 'C', 'A', 
      'G', 'A', 'T', 'G', '\0'};

用户将输入一个字符串,例如 CAT,我需要编写一个程序,以便 printf 语句将显示找到 CAT 的元素。

我尝试使用 strstr 函数,但这只给出了数组中的第一次出现。但是,如果 CAT 出现多次,它不会打印该语句,所以我想知道我应该怎么做?

这是我到目前为止所拥有的:

char input [100];

char DNA[] = {'A', 'G', 'C', 'G', 'G', 'G', 'A', 'C', 'C', 'G', 'T', 'C', 
      'C', 'C', 'G', 'A', 'C', 'A', 'T', 'T', 'G', 'A', 'T', 'G', 
      'A', 'A', 'G', 'G', 'G', 'T', 'C', 'A', 'T', 'A', 'G', 'A', 
      'C', 'C', 'C', 'A', 'A', 'T', 'A', 'C', 'G', 'C', 'C', 'A', 
      'C', 'C', 'A', 'C', 'C', 'C', 'C', 'A', 'A', 'G', 'T', 'T', 
      'T', 'T', 'C', 'C', 'T', 'G', 'T', 'G', 'T', 'C', 'T', 'T', 
      'C', 'C', 'A', 'T', 'T', 'G', 'A', 'G', 'T', 'A', 'G', 'A', 
      'T', 'T', 'G', 'A', 'C', 'A', 'C', 'T', 'C', 'C', 'C', 'A', 
      'G', 'A', 'T', 'G', '\0'};

printf("enter string ");
scanf("%s", &input);

char *find;

find = strstr(DNA, input);

if (find != NULL)
{
    printf("the string is found at element %d\n", (find - DNA)+1);
}

如果我输入 CAT,程序会说它在元素 17 处,但在元素 74 处还有另一个 CAT。

最佳答案

一个 while 循环足以完成此任务。

#include <stdio.h>

int main(void)
{
    char input[100];

    char DNA[] = {
                    'A', 'G', 'C', 'G', 'G', 'G', 'A', 'C', 'C', 'G', 'T', 'C', 
                    'C', 'C', 'G', 'A', 'C', 'A', 'T', 'T', 'G', 'A', 'T', 'G', 
                    'A', 'A', 'G', 'G', 'G', 'T', 'C', 'A', 'T', 'A', 'G', 'A', 
                    'C', 'C', 'C', 'A', 'A', 'T', 'A', 'C', 'G', 'C', 'C', 'A', 
                    'C', 'C', 'A', 'C', 'C', 'C', 'C', 'A', 'A', 'G', 'T', 'T', 
                    'T', 'T', 'C', 'C', 'T', 'G', 'T', 'G', 'T', 'C', 'T', 'T', 
                    'C', 'C', 'A', 'T', 'T', 'G', 'A', 'G', 'T', 'A', 'G', 'A', 
                    'T', 'T', 'G', 'A', 'C', 'A', 'C', 'T', 'C', 'C', 'C', 'A', 
                    'G', 'A', 'T', 'G', '\0'
                 };

    printf("enter string : ");

    scanf("%s", input);


    char *ptr = DNA;

    while( (ptr = strstr(ptr,input)) != NULL )
    {
        printf("the string is found at element %d\n", (ptr-DNA)+1);
        ptr++;
    }
}

关于c - 在 Char 数组中查找字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245140/

相关文章:

php - 检查网站是否包含字符串

c - 使用 clock_gettime() 得到不一致的结果

c - strncpy() 段错误 : shady strtok() manipulations?

c - MPI 动态分配数组

arrays - 转换多列表并将输出转到两列?

c - 将每个偶数对字符与数组中的下一对字符交换

c# - C# 中的 char (C++) 操作

c++ - MFC - 如何将 WCHAR 转换为 CString?

c - for 循环中的段错误

c - 如何更改字符串数组中的字符?