如何在C中的大字符串中找到小字符串?

时间:2019-03-20 09:02:06

标签: c arrays char

尝试在C中创建代码。首先,我不能使用string.h库或任何其他类似的帮助。输入将来自命令行,如:./program模式文件,我已经成功打开文件并将文件行写入数组,但是现在我必须将模式get与文件中的行进行比较。如果写了模式,我必须在整行中打印。

对于输入,我使用:

char array[1000]; // hope 1000 will be enough

char *pattern= argv[1];

对于扫描,我使用:

while (fscanf(f,"%c", &temp)!= EOF){
        if (temp=='\n'){
             Algoritm...
        }
        add to array( array[i++]=temp) - already works`

如果我到了行尾,我就不会出现。当'\ n'出现时,我需要启动算法来找出小字符串是否在行中。

我的问题:

如何比较这些“字符串”?有效率的?

如何知道输入的图案的大小? (我认为我需要做算法)

2 个答案:

答案 0 :(得分:0)

我想您正在Linux上工作。

第一个问题。 memmem()应该在大海捞针中找到针头;

从memmem()联机帮助页中:

  

memmem()函数查找第一次出现的   记忆干草堆中长度为针状的亚弦针   干草堆长度。

     

记忆返回:

     

memmem()函数返回一个指针,该指针指向    子字符串,如果找不到子字符串,则为NULL。

http://man7.org/linux/man-pages/man3/memmem.3.html

第二个问题: How to find the length of argv[] in C

答案 1 :(得分:0)

您可以编写自己的查找功能。

int find(char *array, char *pattern) {
    char *ap, *aap, *pp;
    for(ap=array; *ap; ap++) {
        for(pp=pattern, aap=ap; *aap && *pp && *pp==*aap; aap++, pp++); 
        if(*pp=='\0') return ap-array;
    }
    return -1;
}

外部循环在第1行上循环一个字符。这是内部循环中进行比较的起点。内循环在

时循环遍历您的模式和行
  • 模式未结束
  • 行末不行
  • 模式字符等于行字符

没有循环体。

如果到达图案末端,则找到它,并且该函数将在该行中返回找到的位置。