LINUX.ORG.RU

сортировка, как быстрее? C без плюсов


0

0

Мне нужно обрезать буфер, а потом его сравнить со строчкой.
Что лучше юзать?
Два связных одномерных массива, при этом в одном массиве 21 значение в котром нужно найти полученное при обрезке буфера.
Или как-нибуть с многомерными массивами?
Буфер я режу по поиску пустой строки, а потом в нужной читаю 4 первых символа.
Собственно как это сделать быстрее всего в Си?
anonymous

А поразвёрнутей поставить задачу? А то не ясно нифига...

> Мне нужно обрезать буфер, а потом его сравнить со строчкой.

Буфер - это массив чего-то-там или что?

> Два связных одномерных массива

Связный массив - это что?

> при этом в одном массиве 21 значение в котром нужно найти полученное при обрезке буфера

Ну ты понял да? Короче не ленись - переформулируй

anonymous
()
Ответ на: комментарий от anonymous

->Буфер - это массив чего-то-там или что?
Да, его я получаю и обрезаю вот так...
    int i = 0;
    for(; i < sz; i++) { // sz - это размер buffer2 
        if (buffer2[i] == '\r') {
            if (strncmp(buffer2 + i, "\r\n\r\n", 4) == 0) {
                i += 4;
                break;
            }
        }
    }
    sprintf(buffer2 + i, 1, sz - i, buf3); // вот тут не знаю на сколько это политкорректно

->Связный массив - это что?
Односвязный, вроде так, это когда значения одного массива ищутся в другом...
Например вот так...
char header[N]={"KK*", "\PP\", "S*S"};
char buf3[]="S*s";

int beg=0;
int end=N-1;
int currCenter=0;
int nFound=-1;

for(;;)
{
currCenter=beg+(end-beg+1)/2;
if(currCenter>=end)currCenter=end;
if((strncmp(header[currCenter],buf3,strlen(buf3)))==0)
{
nFound=currCenter;
break;
}
else
if((strncmp(header[currCenter],buf3,strlen(buf3)))>0)
end=currCenter;
else
beg=currCenter;
if(end<=beg)break;
}

--> при этом в одном массиве 21 значение в котром нужно найти полученное при обрезке буфера
->Ну ты понял да? Короче не ленись - переформулируй
да походу так не выйдет, сам не понял чего захоел=)

В общем как сделать быстрее то что выше...

anonymous
()
Ответ на: комментарий от anonymous

> char header[N]={"KK*", "\PP\", "S*S"};

несоответствие типов

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

А если так?
int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return 0;
}
Как выдернуть из бинарного файла последнюю строку? Можно перебрать все строчки, но это долго, можно ли выдернуть самую последнюю, ну и в ней уже искать strncpy'ем?

anonymous
()
Ответ на: комментарий от anonymous

Вы всё тот же анонимус, который пытается скачать GIF по HTTP?

Deleted
()

Быстрее всего будет написать парсер на re2c или на flex'е. Оно сгенерит конечный автомат, который будет работать быстрее чем ты будешь извращаться руками с strstr и strcmp.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.