Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

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

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

Мысль о максимально оптимизированной функции длинны строки, где строка это указатель на литерал типа 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2013, 16:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как написать максимально оптимизированную функцию поиска длинны строки? (C++):

Написать функцию рекурсивного бинарного поиска - C++
Рекурсия. Двоичный поиск. Написать функцию рекурсивного бинарного поиска. Использовать написанную функцию для знаходення...

Написать функцию рекурсивного бинарного поиска - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; void input(int Arr,int r); void output(int Arr,int r); int...

Как поместить строки разной длинны в двумерный массив? (файловый ввод/вывод) - C++
Всем доброго времени суток! Есть файл с нескольким количеством строк и все эти строки разной длинны, как мне их поместить в двумерный...

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

Написать generic функцию линейного поиска в массиве - C++
Предложите ваши варианты решения заданий 5. Имеем чистый C. Напишите generic функцию линейного поиска в массиве. И приведите пример...

Написать функцию поиска структур (записей) с заданными признаками - C++
Написать функцию поиска структур (записей) с заданными признаками (например, выбор структур по заданному диапазону значений элемента). ...

32
Hugra
48 / 48 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
23.08.2013, 17:47 #16
Цитата Сообщение от Bend3r Посмотреть сообщение
Как вариант
C++
1
2
3
4
5
int i = 0;
while(s[i] != "\0")
{
++i;
}
Тогда уж
C++
1
2
3
4
5
int i = 0;
while(s[i] != '\0')
{
++i;
}
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 17:51 #17
Цитата Сообщение от Bend3r Посмотреть сообщение
Как вариант
C++
1
2
3
4
5
int i = 0;
while(s[i] != "\0")
{
++i;
}
Это стандартный алгоритм strlen'a. Можна попробывать использовать алгоритм двоичного поиска в отсортированом массива только както напримере строки, ну мож не правильно сформулировар, сейчас попробую накидать код.
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:53  [ТС] #18
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Это стандартный алгоритм strlen'a. Можна попробывать использовать алгоритм двоичного поиска в отсортированом массива только както напримере строки, ну мож не правильно сформулировар, сейчас попробую накидать код.
Смысл в том чтобы получить максимально быстрый и код. Интересно, все закончится вставками из ассемблера ))) ?
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
23.08.2013, 17:54 #19
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Это стандартный алгоритм strlen'a. Можна попробывать использовать алгоритм двоичного поиска в отсортированом массива только както напримере строки, ну мож не правильно сформулировар, сейчас попробую накидать код.
Я знаю, но вопрос тс был задан таков: Максимально быстрый поиск, длинны строки. А вы будите пытаться создать поиск чего либо в этой строке.
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:54  [ТС] #20
Цитата Сообщение от Hugra Посмотреть сообщение
Тогда уж
C++
1
2
3
4
5
int i = 0;
while(s[i] != '\0')
{
++i;
}
Мне кажется в этом сообщение, вообще нет отличий...
0
za5
442 / 346 / 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)
0
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;
}
Если тупанул, не кричать! ))
0
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,тупанул ничего страшного. Это же форум.
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:10 #24
ах сек
0
za5
442 / 346 / 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;
}
0
Croessmah
Пришел
Эксперт CЭксперт С++
13735 / 7814 / 889
Регистрация: 27.09.2012
Сообщений: 19,202
Записей в блоге: 3
Завершенные тесты: 1
23.08.2013, 18:16 #26
Цитата Сообщение от za5 Посмотреть сообщение
ну это правда будет с массивом работать:
Это будет вычислено в момент компиляции.
1
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 забыл про него.
0
MickeyBlueEyes
Студент
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
23.08.2013, 18:42 #28
ах не вышло, в памяти за границами попадается всё что угодно и \0 и символы, найти правильно границу не получается. Разве что выделять большой кусок памяти в начале программы, инициализировать все ячейки например - 0. И тогда можно будет складывать и быстрее искать ) а так походу катит только стандартный алгоритм, ну если только ASM или ещё какие то оптимизаторы.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
23.08.2013, 20:46 #29
Цитата Сообщение от vbloodv Посмотреть сообщение
Не получается взять размер всего слова, к тому же по факту 3 раза сторонняя функция используется которая сама по себе еще не быстрая.

MousePro,тупанул ничего страшного. Это же форум.
sizeof - не функция.
0
Thinker
Эксперт С++
4230 / 2204 / 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';
0
23.08.2013, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2013, 21:05
Привет! Вот еще темы с ответами:

Написать рекурсивную функцию поиска заданного числа Фибоначчи - C++
. Написать рекурсивную функцию поиска заданного числа Фибоначчи.

Нужно написать своеобразную функцию поиска строк в кавычках - C++
Мне нужна функция которая в текстовом файле примерно со следующим содержанием &quot;string1&quot; sometext &quot;string2&quot; искала строки заключённые в...

Написать функцию поиска максимального и минимального элементов одномерного массива - C++
Не сочтите за наглость ребята, но заставили на старость лет учиться, вообше то по профессии электронщик и ремонтирую железо компов много...

Написать функцию двоичного поиска в упорядоченном по алфавиту массиве слов - C++
Написать функцию двоичного поиска в упорядоченном по алфавиту массиве слов


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.