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

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

23.08.2013, 16:59. Показов 2124. Ответов 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
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
23.08.2013, 17:08 2
что-то ничего кроме функции length не могу придумать))))
1
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:13  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
unsigned int length(const char * str)
{
    const char * p = str;
    while(str != "")
    {
        str++;
    }
    return str-p;
}
Моя функция не работает, думаю надо создавать еще одну переменную, но возможно можно это как-то изменить...

Цитата Сообщение от Atlant_V Посмотреть сообщение
что-то ничего кроме функции length не могу придумать))))
Ну хоть попытался, у меня такое ощущение что вопрос не из разряда, как сменить текст на русский в консоли и надо переносить в раздел для профессионалов )) Никто не заходит в этот пост.
0
50 / 50 / 9
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
23.08.2013, 17:17 4
Цитата Сообщение от vbloodv Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
unsigned int length(const char * str)
{
    const char * p = str;
    while(str != "")
    {
        str++;
    }
    return str-p;
}
Ты возвращаешь разницу адресов?

Ты хочешь свой алгоритм написать что-ли? Чем тебя стандартная strlen() к примеру не устраивает?
2
58 / 58 / 13
Регистрация: 12.11.2011
Сообщений: 109
23.08.2013, 17:17 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
unsigned int length(char *str);
int main(int argc, char *argv[])
{
    char *str = "hello world !!!";
    printf("String length: %d", length(str));
 
    return 0;
}
 
unsigned int length(char *str)
{
    int i = 0;
    while(str[i] != 0) i++;
 
    return i;
}
1
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:21  [ТС] 6
Цитата Сообщение от Hugra Посмотреть сообщение
Ты хочешь свой алгоритм написать что-ли? Чем тебя стандартная strlen() к примеру не устраивает?
Цитата Сообщение от extenup Посмотреть сообщение
unsigned int length(char *str)
Спасибо соратники, я просто практиковался.
Мой код работает только в такой интепретации:
C++
1
2
3
4
5
6
7
8
9
unsigned int length(const char * str)
{
    const char * p = str;
    while(strcmp(str,""))
    {
        str++;
    }
    return str-p;
}
И смысл от него теряется, стандартная функция наиболее быстрая...
0
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
23.08.2013, 17:24 7
иногда хочется придумать "велосипед" заново
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:25  [ТС] 8
Я ошибся есть еще более сатанитский вариант, вот только экономии памяти достигнуть не получилось,
C++
1
sizeof(char *) = sizeof(int )
C++
1
2
3
4
5
6
7
8
9
unsigned int length(const char * str)
{
    const char * p = str;
    while(str[0] != 0)
    {
        str++;
    }
    return str-p;
}
0
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
23.08.2013, 17:27 9
Цитата Сообщение от vbloodv Посмотреть сообщение
у меня такое ощущение что вопрос не из разряда, как сменить текст на русский в консоли и надо переносить в раздел для профессионалов ))
а на счет того, как здесь порой отвечают на вопросы, я с тобой согласен.
0
50 / 50 / 9
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
23.08.2013, 17:28 10
Цитата Сообщение от Atlant_V Посмотреть сообщение
иногда хочется придумать "велосипед" заново

Не по теме:

Дело не в этом. Иногда сложно понять , что хочет ТС и для чего. Придумывание велосипедов в процессе обучения обычное дело.
Я пока читаю книгу по C++ напридумывал велосипедов , хоть свою библиотеку функций и классов собирай вместо стандартной. Процесс создания велосипедов, это способ разобраться и понять что и как работает изнутри.

0
vbloodv
23.08.2013, 17:29  [ТС]
  #11

Не по теме:

Цитата Сообщение от Hugra Посмотреть сообщение
Дело не в этом. Иногда сложно понять , что хочет ТС и для чего. Придумывание велосипедов в процессе обучения обычное дело.
Я пока читаю книгу по C++ напридумывал велосипедов , хоть свою библиотеку функций и классов собирай вместо стандартной. Процесс создания велосипедов, это способ разобраться и понять что и как работает изнутри.
У меня нет таких мотивов, это тестовое задание в одной из IT компаний.

0
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
23.08.2013, 17:33 12
Hugra,
так я не хотел кого-то обидеть. а с тобой полностью согласен!

Добавлено через 3 минуты
vbloodv, ты только собираешься в IТ-компании или уже был там?
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
23.08.2013, 17:37 13
Как вариант
C++
1
2
3
4
5
int i = 0;
while(s[i] != "\0")
{
++i;
}
1
8 / 8 / 0
Регистрация: 14.08.2013
Сообщений: 99
23.08.2013, 17:39 14
Bend3r, маладца. Все гениальное просто
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:46  [ТС] 15
Цитата Сообщение от Bend3r Посмотреть сообщение
Как вариант
C++
1
2
3
4
5
int i = 0;
while(s[i] != "\0")
{
++i;
}
Не совсем могу уловить чем этот способ отличается от предложенного в msdn и 2-мя другими участниками форума:
C++
1
2
3
4
5
6
7
unsigned int length(char *str)
{
    int i = 0;
    while(str[i] != 0) i++;
 
    return i;
}
У меня появились вопросы по: должно ли быть unsigned int i и
C++
1
return static_cast<unsigned int>(i);
0
50 / 50 / 9
Регистрация: 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
Студент
121 / 132 / 39
Регистрация: 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
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.08.2013, 17:53  [ТС] 18
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Это стандартный алгоритм strlen'a. Можна попробывать использовать алгоритм двоичного поиска в отсортированом массива только както напримере строки, ну мож не правильно сформулировар, сейчас попробую накидать код.
Смысл в том чтобы получить максимально быстрый и код. Интересно, все закончится вставками из ассемблера ))) ?
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
23.08.2013, 17:54 19
Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Это стандартный алгоритм strlen'a. Можна попробывать использовать алгоритм двоичного поиска в отсортированом массива только както напримере строки, ну мож не правильно сформулировар, сейчас попробую накидать код.
Я знаю, но вопрос тс был задан таков: Максимально быстрый поиск, длинны строки. А вы будите пытаться создать поиск чего либо в этой строке.
1
23 / 23 / 3
Регистрация: 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
23.08.2013, 17:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2013, 17:54
Помогаю со студенческими работами здесь

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

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

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

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


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

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