С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
1

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

23.08.2013, 16:59. Показов 2198. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа 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();
}
Пожалуйста подскажите ваши варианты...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2013, 16:59
Ответы с готовыми решениями:

Написать алгоритм поиска двух посл элементов, произведение которых максимально
Я тут накидал кое что, помогите, буду оооочень признателен, ничего не понимаю 1)Напишите алгоритм...

Написать функцию поиска элемента X в двоичном дереве поиска
Написать функцию поиска элемента X в двоичном дереве поиска.

Написать функцию обнаруживающую элементы массива, максимально отличающиеся от соседей
Здавствуйте. Помогите пожалуйста с написание программы. Нечего в голову не лезет. За ранее...

Как получить точно значение длинны строки
Здравствуйте. Почему obj.length возвращает неточное значение длинны текстовой строки? Пример:...

32
444 / 348 / 32
Регистрация: 16.10.2010
Сообщений: 842
Записей в блоге: 7
23.08.2013, 18:01 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от vbloodv Посмотреть сообщение
int i = 0;
while(s[i] != '\0')
{
++i;
}
а разве так не быстрее будет:
C++
1
(sizeof(*str)-sizeof(char))/sizeof(char)
0
50 / 31 / 4
Регистрация: 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;
}
Если тупанул, не кричать! ))
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 18:09  [ТС] 23
Цитата Сообщение от za5 Посмотреть сообщение
а разве так не быстрее будет:
C++
1
(sizeof(*str)-sizeof(char))/sizeof(char)
Не получается взять размер всего слова, к тому же по факту 3 раза сторонняя функция используется которая сама по себе еще не быстрая.

MousePro,тупанул ничего страшного. Это же форум.
0
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:10 24
ах сек
0
444 / 348 / 32
Регистрация: 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;
}
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,933
Записей в блоге: 1
23.08.2013, 18:16 26
Цитата Сообщение от za5 Посмотреть сообщение
ну это правда будет с массивом работать:
Это будет вычислено в момент компиляции.
1
23 / 23 / 3
Регистрация: 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 забыл про него.
0
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:42 28
ах не вышло, в памяти за границами попадается всё что угодно и \0 и символы, найти правильно границу не получается. Разве что выделять большой кусок памяти в начале программы, инициализировать все ячейки например - 0. И тогда можно будет складывать и быстрее искать ) а так походу катит только стандартный алгоритм, ну если только ASM или ещё какие то оптимизаторы.
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
23.08.2013, 20:46 29
Цитата Сообщение от vbloodv Посмотреть сообщение
Не получается взять размер всего слова, к тому же по факту 3 раза сторонняя функция используется которая сама по себе еще не быстрая.

MousePro,тупанул ничего страшного. Это же форум.
sizeof - не функция.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 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';
0
2686 / 2258 / 244
Регистрация: 03.07.2012
Сообщений: 8,218
Записей в блоге: 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;
}
1
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
24.08.2013, 12:58  [ТС] 32
Цитата Сообщение от zer0mail Посмотреть сообщение
Можно так:
VICTORY
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.08.2013, 16:55 33
vbloodv, на форуме немало аналогов strlen, например
Написать strlen() путем считывания групп из 8ми байтов строки
Напишите свой аналог функций strlen()
1
24.08.2013, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2013, 16:55
Помогаю со студенческими работами здесь

Как осуществить ввод строки бесконечной длинны с клавиатуры?
Есть задание в котором я не понял несколько моментов. Задание следующее: Из входного потока...

Написать функцию поиска
3. Написать функцию 'poisk' с двумя аргументами , второй аргумент список из 3 элементов (имя...

Как с основной формы поиска в вордпресс прописать свою функцию поиска
Как с основной формы поиска в вордпресс прописать свою функцию поиска - с этой searchform данные...

Как написать на masm под х86 функцию поиска кол-ва вхождений последовательности байт в большом массиве байт?
Привет! В общем читаю я файл (большой) и хочу найти кол-во вхождений в этот файл некоторой...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru