Форум программистов, компьютерный форум CyberForum.ru

Напишите свои аналоги функций strlen(), strcpy(), strcmp() и сравните с библиотечными. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Есть ли C++ нативный способ быстро обнулить массив (аналог bzero)? + ещё 2 вопроса http://www.cyberforum.ru/cpp-beginners/thread38637.html
Второй вопрос - если конструктор обнаружил условия, препятствующие созданию объекта, есть ли способ "не создавать" объект и не использовать потом дестуктор? Третий - стоит ли использовать динамические переменны внутри локальной области видимости(создать и удалить перед выходом из этой области) Спасибо
C++ функция разбивает файл на биты.... Написать функцию,разбивающую файл на биты и записывающую последовательно эти биты с интервалом в 24 байт в другой файл. В случае нехватки длины 2-го файла вывести предупреждение сообщение и прекратить работу. http://www.cyberforum.ru/cpp-beginners/thread38636.html
Рассортировать строки матрицы по возрастанию первых элементов строк C++
8. Создать нижний относительно побочной диагонали треугольник динамической квадратной матрицы. Рассортировать строки матрицы по возрастанию первых элементов строк проблема в том, что матрица триугольная и никак строки не поменяешь местами пишет ошибку. значет надо менять адреса а как? вот мой код int main () { int n; cout<<"Enter size"<<endl; cin>>n; int **arrow=new int*;
C++ Сохранение изображения
Моя программа похожа на PAINT только под DOS в Borland C 3.1. Как мне сохранять рисунки которые я рисую?
C++ Изобразить движение по спирали http://www.cyberforum.ru/cpp-beginners/thread38629.html
Помогите зделать движение по спирали(на рисунку). Я так понимаю надо двигатса по елипсу и смещать центр, но не знаю как это зделать.
C++ Двумерные массивы (+символьные) Вот 5 задач... необходимо помочь братишке... сам я в С++ не особо силен... Сильно прошу вас помочь мне... За оказанную услугу готов оказать услугу написания сайта) очень жду помощи... 1) Дан двумерный массив целых чисел. а) Сформировать одномерный массив, каждый элемент которого ра- вен наибольшему по модулю элементу соответствующего столбца двумерного массива. б) Сформировать... подробнее

Показать сообщение отдельно
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
11.04.2011, 19:47     Напишите свои аналоги функций strlen(), strcpy(), strcmp() и сравните с библиотечными.
Вот начиркал для демонстрации, одна функция реализованная на С++ другая на встроенном ASM.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// c++
int  _strcmp(const char* str1, const char*  str2) {
     while( *str1 == *str2 ) {
          *str1++;
          *str2++;
          if( *str1 == '\0' && *str2 == '\0' )
      return 0;
      }
      return   1;
}
 
// asm c++
int  strcmp_(const char*  str1, const char* str2) {
    int  res = 1;
    __asm {
       lea esi, str1
       lea edi, str2 
next:
       mov  al, byte ptr [esi]
       cmp  al, byte ptr [edi]
       jne   end;
                inc esi
       inc edi
       mov  al, byte ptr [esi]
       or  al, byte ptr [edi]
       jz   yes;
       jmp  next;
yes:
       mov  dword ptr res,  0           
end:
       };
       return  res;
}
 
 
// тестируем функцией winApi GetTickCount()
 
DWORD  begin = GetTickCount();
 
for(long i = 0L; i < 1000000; i++) {
   if(! strcmp("Hello World !!!", "Hello World !!!"))  // библотечная функция 1 - место 17-29 мск
       continue;
 /*  if(! strcmp_("Hello World !!!", "Hello World !!!")) //моя функц-asm c++ функция 2-место 37-45 мкс
      continue;
   if(! strcmp("Hello World !!!", "Hello World !!!"))  // моя функц-c++ 3 - место 120 - 157 мкс
       continue;*/
}
printf("elapsed = %d\n", GetTickCount() - begin);
Встроенный asm в с++ маленько не дотянул до модуля asm стандартной библиотеки, хотя по-алгоритму по asm можно писать ещё компактнее просто я давно уже в ASM не прогил, там уже встроенные функции аппаратно поддерживающие работы со строками cmps типа такого....

Добавлено через 5 минут
Цитата Сообщение от flexin777 Посмотреть сообщение
xAtom,я просто сам хотел написать свои реализации этих функций.Сейчас я решаю упражнения в книге Страуструпа.
Молодец flexin777, опыта наберёшся. Я тоже в своё время писал все стандартный библиотечные функции с/с++ strlen, strncmp, memcpy, memchr, memset и т.п, удачи...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru