Решено: Поиск слова и вывод строки (чистый Си)

Модератор: Модераторы разделов

GenchiK
Сообщения: 27

Решено: Поиск слова и вывод строки

Сообщение GenchiK »

Ещё раз привет!

1.)Вот такой вопрос, мне нужно найти в файле слово, и если слово есть, то вывести всю строку.Я пишу программу словарь, по-этому такой вопрос.То есть к примеру я ввёл слово hello, а в файле строка вида: hello привет

Вопрос: как мне вывести всю строку? Т.е hello привет

2.)И как реализовать следующий момент, пользователь хочет удалить слово из словаря, программа запрашивает это слово у пользователя, открывается файл, находится слово.

Вопрос: как удалить всю строку? То есть пользователь ввёл hello, программа должна удалить из файла строку hello привет.

Спасибо!
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Решено: Поиск слова и вывод строки

Сообщение serzh-z »

Вопрос из сорта вопросов про сферического коня. Как-как... 1. Читать файл построчно и искать подстроку с помощью strstr. 2. например, выяснить номер нужной строки в файле (как в п. 1), потом записать все строки (кроме ненужной) в другой, временный, файл. После чего поместить его на место старого.
Спасибо сказали:
GenchiK
Сообщения: 27

Re: Решено: Поиск слова и вывод строки

Сообщение GenchiK »

1.Как подстроку найти это ясно, а как вывести всю строку с найденной подстрокой?
2.Как узнать номер строки?

оО
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: Поиск слова и вывод строки

Сообщение agentprog »

GenchiK писал(а):
29.01.2011 03:10
Как подстроку найти это ясно, а как вывести всю строку с найденной подстрокой?

Вы читаете файл построчно. То есть у Вас уже есть отдельная строка. strstr() вы прогоняете по ней, а не по всему файлу. Если подстрока там есть, значит вывести всю строку.
GenchiK писал(а):
29.01.2011 03:10
Как узнать номер строки?

Вы читаете файл построчно. Заводите переменную счетчик, при прочтении следующей строки, увеличиваете этот счетчик.
No problems - just solutions!
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Решено: Поиск слова и вывод строки

Сообщение eddy »

GenchiK писал(а):
29.01.2011 01:33
пишу программу словарь

В этом случае, батенька, вам тупой поиск никак не поможет: либо используйте какой-нибудь sqlite для хранения списка слов, либо организуйте свою собственную БД. Но без индексирования вы получите жуткие тормоза. Разве только если у вас будет один-единственный словарь с ~10000 слов - тогда торможения почти не будет заметно. Особенно если его сразу в оперативку загнать (или хотя бы mmap сделать).

Кстати, могу поделиться башевским cgi, который ищет введенное слово по двум словарям.

Код: Выделить всё

#!/bin/sh
addw()
{
    echo "<form  action="/cgi-bin/addaword" method=POST>\
    The translation of &nbsp;<b><input size=20 name="word" value="\"$word\""></b>&nbsp; is &nbsp;<input name="trans" size=50>"
    echo "<input type=submit value=\"Add the word\"></form>"
}
ud="../Dictionary/userdict.txt"
eval `./convert`

echo -e "Content-type: text/html\n"
cat "char.txt"
echo "<title>My English-russian Computer Dictionary</title>"
echo "<body>"
if [ "$word" = "" ]; then
    tr="Please, enter a word"
else
    tr=`cat $ud|grep -i " $word "`
    tr1=`cat ../Dictionary/Dictionary.txt|grep -i "^$word:"`
    tr2=`cat ../Dictionary/Dictionary.txt|grep -i "$word"`
    tr3=`cat ../Dictionary/kara4.dic| grep -i "$word"`
fi

if [ "$pass" = "passwd" ]; then
    tmp="/tmp/dic.cgi.$$"
    cat $ud | grep -v " $word " > $tmp
    rm $ud
    cp $tmp $ud
    rm $tmp
    addw
    exit
fi

if [ "$tr" != "" -o "$tr1" != "" -o "$tr2" != "" -o "$tr3" != "" ]; then
    if [ "$tr1" = "" ]; then
    if [ "$tr2" = "" ]; then
        tr1="The word is absent"
    else
        tr1="$tr2"
    fi
    fi
    if [ "$tr" = "" ]; then tr="The word is absent"; fi
    echo "<H5 align=center color="blue">Main dictionary:</H5><pre>"
    echo "$tr1" | sed -e "s/ \+/ /g" -e "s/$word/<font color=red>$word<\/font>/g"
    echo "</pre><H5 align=center color="green">User's dictionary:</H5><pre>"
    echo "$tr" | sed -e "s/ \+/ /g" -e  "s/$word/<font color=red>$word<\/font>/g"
    echo "</pre><H5 align=center color="cyan">Карачаевский:</H5><pre>"
    echo "$tr3" | sed -e "s/ \+/ /g" -e  "s/$word/<font color=red>$word<\/font>/g"
    echo "</pre>"
else
    echo "I don't know this word, but you can add it to my database"
    addw
fi

echo "</body>"
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: Поиск слова и вывод строки

Сообщение NickLion »

Словарь вообще лучше делать на основе (если не БД) двоичных деревьев поиска, лучше сразу смотреть красно-чёрные деревья, или хэш-таблиц (наверное лучший вариант по скорости выборки в случае большого числа слов и хорошей хэш-функии).
Спасибо сказали:
GenchiK
Сообщения: 27

Re: Решено: Поиск слова и вывод строки

Сообщение GenchiK »

Ребята всем спасибо!))))Мне простеньких совсе нужен словарь, БД в виде текстового файла))))) Почти закончил писать осталась 1 функция))) Как допишу сделаю тут пост, надеюсь вы мне укажете на мои ошибки)))))И поможете сделать словарик лучше))))Спасибо ещё раз!
Спасибо сказали: