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

Как написать максимально оптимизированную функцию поиска длинны строки? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 16:59     Как написать максимально оптимизированную функцию поиска длинны строки? #1
Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа char.
Не будем использовать не std::string, не std::wstring, не wchar_t
в функцию передается указатель на строку, вот тело:
C++
1
2
3
4
5
6
7
int main()
{
    char * str= "hello world";
    int v = length(str);
    std::cout << v << std::endl;
    std::cin.get();
}
Пожалуйста подскажите ваши варианты...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2013, 16:59     Как написать максимально оптимизированную функцию поиска длинны строки?
Посмотрите здесь:

C++ Написать функцию рекурсивного бинарного поиска
Написать функцию поиска максимального и минимального элементов одномерного массива C++
C++ Чтение длинны строки из файла
C++ Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
C++ Написать функцию поиска структуры с заданным значением
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
za5
440 / 344 / 30
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
23.08.2013, 18:01     Как написать максимально оптимизированную функцию поиска длинны строки? #21
Цитата Сообщение от vbloodv Посмотреть сообщение
int i = 0;
while(s[i] != '\0')
{
++i;
}
а разве так не быстрее будет:
C++
1
(sizeof(*str)-sizeof(char))/sizeof(char)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
23.08.2013, 18:04     Как написать максимально оптимизированную функцию поиска длинны строки? #22
Цитата Сообщение от vbloodv Посмотреть сообщение
Смысл в том чтобы получить максимально быстрый и код. Интересно, все закончится вставками из ассемблера ))) ?
C++
1
2
3
4
5
6
7
8
9
10
11
#include "iostream"
 
 
int main()
{
    char a[]="hello world";
    std::cout<<sizeof(a);
 
    system ("pause");
    return 0;
}
Если тупанул, не кричать! ))
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 18:09  [ТС]     Как написать максимально оптимизированную функцию поиска длинны строки? #23
Цитата Сообщение от za5 Посмотреть сообщение
а разве так не быстрее будет:
C++
1
(sizeof(*str)-sizeof(char))/sizeof(char)
Не получается взять размер всего слова, к тому же по факту 3 раза сторонняя функция используется которая сама по себе еще не быстрая.

MousePro,тупанул ничего страшного. Это же форум.
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:10     Как написать максимально оптимизированную функцию поиска длинны строки? #24
ах сек
za5
440 / 344 / 30
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
23.08.2013, 18:14     Как написать максимально оптимизированную функцию поиска длинны строки? #25
ну это правда будет с массивом работать: не динамически...
C++
1
2
3
4
5
6
7
8
int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;
    char str[] = "123456789";
    cout << (sizeof(str)/sizeof(char) - 1) << endl;
    cin.get();
    return 0;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
23.08.2013, 18:16     Как написать максимально оптимизированную функцию поиска длинны строки? #26
Цитата Сообщение от za5 Посмотреть сообщение
ну это правда будет с массивом работать:
Это будет вычислено в момент компиляции.
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 18:18  [ТС]     Как написать максимально оптимизированную функцию поиска длинны строки? #27
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Проходов стало меньше, но на 1 проверку больше, и при услоивии что все что в строке входит в диапазоны ASCII, и если в памяти за границами попадётся чтото в этом диапазоне, как поведёт тогда я хз )
C++
1
size_t i = 1, len = 0;
памяти в 2 раза больше под две переменные.
C++
1
len = i * 2;
такое умножение будет быстрее делаться если использовать битовый сдвиг или лучше сложение. Спасибо за size_t забыл про него.
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:42     Как написать максимально оптимизированную функцию поиска длинны строки? #28
ах не вышло, в памяти за границами попадается всё что угодно и \0 и символы, найти правильно границу не получается. Разве что выделять большой кусок памяти в начале программы, инициализировать все ячейки например - 0. И тогда можно будет складывать и быстрее искать ) а так походу катит только стандартный алгоритм, ну если только ASM или ещё какие то оптимизаторы.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
23.08.2013, 20:46     Как написать максимально оптимизированную функцию поиска длинны строки? #29
Цитата Сообщение от vbloodv Посмотреть сообщение
Не получается взять размер всего слова, к тому же по факту 3 раза сторонняя функция используется которая сама по себе еще не быстрая.

MousePro,тупанул ничего страшного. Это же форум.
sizeof - не функция.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.08.2013, 21:05     Как написать максимально оптимизированную функцию поиска длинны строки? #30
Цитата Сообщение от vbloodv Посмотреть сообщение
Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа char.
в силу поиска первого попавшегося пресловутого символа '\0', никакая максимальная оптимизация не поможет, кроме как тупо пробежаться по всем символам до первого вхождения '\0'

Добавлено через 1 минуту
Цитата Сообщение от Герц Посмотреть сообщение
sizeof - не функция.
более того, sizeof и не поможет здесь. пример

C++
1
2
char s[] = "abc";
s[1] = '\0';
zer0mail
2189 / 1872 / 187
Регистрация: 03.07.2012
Сообщений: 6,665
Записей в блоге: 1
23.08.2013, 22:00     Как написать максимально оптимизированную функцию поиска длинны строки? #31
Можно так:
C++
1
2
3
4
5
6
unsigned int length(char*  str)
{
    char *p;
    for (p=str; *p++;);
    return p-str-1;
}
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
24.08.2013, 12:58  [ТС]     Как написать максимально оптимизированную функцию поиска длинны строки? #32
Цитата Сообщение от zer0mail Посмотреть сообщение
Можно так:
VICTORY
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 16:55     Как написать максимально оптимизированную функцию поиска длинны строки?
Еще ссылки по теме:

C++ Написать функцию поиска структур (записей) с заданными признаками
Нужно отредактировать код поиска в некоторых папках. Добавить функцию поиска в архивах C++
C++ Написать функцию поиска и вывода на экран ВСЕХ делителей чисел из переданного диапазона

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.08.2013, 16:55     Как написать максимально оптимизированную функцию поиска длинны строки? #33
vbloodv, на форуме немало аналогов strlen, например
Написать strlen() путем считывания групп из 8ми байтов строки
Напишите свой аналог функций strlen()
Yandex
Объявления
24.08.2013, 16:55     Как написать максимально оптимизированную функцию поиска длинны строки?
Ответ Создать тему
Опции темы

Текущее время: 15:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru