Как найти маленькую строку в большой строке в C? - PullRequest
0 голосов
/ 20 марта 2019

пытается создать код на C. Прежде всего, я не могу использовать библиотеку string.h или любую другую, которая помогает аналогичным образом.Входные данные будут поступать из командной строки, например: ./program pattern file, мне уже удалось открыть файл и записать строку файла в массив, но теперь мне нужно сравнить шаблон 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 голосов
/ 20 марта 2019

Вы можете написать свою собственную функцию поиска.

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 символьная петля.Это начальная точка для сравнения во внутреннем цикле.Внутренний цикл зацикливается на вашем паттерне и линии, в то время как паттерн

  • не заканчивается
  • строка не заканчивается
  • паттерн char равен line char

без тела цикла.

Если достигнут конец шаблона, он найден, и функция возвращает найденную позицию в строке.

0 голосов
/ 20 марта 2019

Полагаю, вы работаете над Linux.

За ваш первый вопрос. memmem () должен найти иголку в вашем стоге сена;

Из справочной страницы memmem ():

Функция memmem () находит начало первого появления подстрока иглы длиной иголка в области памяти стог сена длина стога сена.

memmem возвращает:

Функция memmem () возвращает указатель на начало подстрока или NULL, если подстрока не найдена.

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

По второму вопросу: Как найти длину argv [] в C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...