gpt4 book ai didi

c - 在较大的字符串中查找子字符串 (C)

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:50 26 4
gpt4 key购买 nike

我有一个程序要求用户输入几个字符。我的程序有一大堆字母,将搜索这些字母以查看是否可以找到用户的输入。如果找到,则打印其值的索引。如果在数组中找到输入的多个副本,则将打印所有索引。

有一个转折点,如果用户输入一个 * 字符,它可以被视为任何字母并且将被忽略,例如 AB* 可能是 ABA、ABB、ABC 等。

我有我的函数 searchArray,它确定一个通配符 *。

char* searchArray(char *DNA, char *string) 
{
if (!*string)
return NULL;
char *p1 = (char*)DNA;
while (*p1)
{
char *p1Begin = p1,
*p2 = (char*)string;
while ((*p1 && *p2 && *p1 == *p2) || *p2 == '*')
{
p1++;
p2++;
}
if (!*p2)
return p1Begin;
p1 = p1Begin + 1;
}
return NULL;
}

我在我的主程序中调用这个函数来比较字符串,如果字符串匹配,我将打印它所在位置的索引。但是我似乎无法打印超过 1 个索引(如果有多组,则不会打印)。

char * result = searchArray(DNA, inputstring);
while (result != NULL)
{
int position = result - DNA;
printf("Match found at element %d", position);
result = strstr(++result, inputstring);
}

最佳答案

下面的代码

  • 简化逻辑
  • 必须在 findString 的末尾有任何“通配符”
  • 工作正常
  • 利用可用的 C 库函数,特别是 strstr()
  • 打印输出,每行一个条目

有一些边缘情况会成为问题,但是,您可以处理这些

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


int main( void )
{
// DNA must be an array, not a pointer to an array
char DNA[] = { "zabcdefghijklmnab defghijk ab 123 ab" };

// findString must be an array, not a pointer to an array
char findString[] = {"ab*"};

// always a good idea to initialize variables on the stack
char *wildCard = NULL;

// Note following 'if' will not result in correct action if
// wildcard character not last in findString
if( ( wildCard = strstr( findString, "*") ) )
{ // then a trailing '*', so replace with NUL byte
*wildCard = '\0';
}

// get first possible pointer to where findString is in DNA string
char * result = strstr( result, findString );

while( result )
{ // then an instance of the findString found in DNA string
int position = result - DNA;
printf("Match found at element %d\n", position);
// Note: step over first byte of instance of findString
// may want to change +1 to length of original findString
result = strstr( result+1, findString );
}
return 0;
} // end function: main

关于c - 在较大的字符串中查找子字符串 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33293372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com