尝试在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'出现时,我需要启动算法来找出小字符串是否在行中。
我的问题:
如何比较这些“字符串”?有效率的?
如何知道输入的图案的大小? (我认为我需要做算法)
答案 0 :(得分:0)
我想您正在Linux上工作。
第一个问题。 memmem()应该在大海捞针中找到针头;
从memmem()联机帮助页中:
memmem()函数查找第一次出现的 记忆干草堆中长度为针状的亚弦针 干草堆长度。
记忆返回:
memmem()函数返回一个指针,该指针指向 子字符串,如果找不到子字符串,则为NULL。
答案 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行上循环一个字符。这是内部循环中进行比较的起点。内循环在
时循环遍历您的模式和行没有循环体。
如果到达图案末端,则找到它,并且该函数将在该行中返回找到的位置。