Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый Сегодня, 00:20   #81
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 298
Репутация: 71
По умолчанию

...тупым юзерам можно учить JS и прочие php, там все "как нада", глючит тоже не хуже люстры с наездником )
....а в С/С++ языках и Unix системах простая идеология - 1 программа (или 1 процедура) должна выполнять ровно 1 действие. Поэтому strcat копирует строку и ничего более. Комбайнеры сидят на виндовс и изобретают эксели и прочие Nero.
alexzk на форуме   Ответить с цитированием
Старый Сегодня, 00:37   #82
bugaboo
Пользователь
 
Регистрация: 18.06.2017
Сообщений: 20
Репутация: 10
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Тогда strcat здесь вообще не к месту.
Именно. И такой подход (подход, при котором слово "Боря" занимает 4 ячейки памяти) использован в Excel.
Цитата:
Сообщение от p51x Посмотреть сообщение
С и С++ создавались и развиваются с позиции прокладка умная и знает, что хочет... а у вас даже не программист.
И вот я (умный программист) пишу для него (тупого юзера) код функции, которая сделает ему "тепло" + "ход" = "теплоход", ничего не требуя взамен. Он тупой, он ничего не знает про выделение памяти, выделять её не намерен, и дай бог, чтобы удалось его уговорить её потом почистить. Пока что мы остановились на том, что он (другой, ещё более умный программист, чем я) предложил такой код для реализации моего криво написанного алгоритма:
Код:

void sum(char*& c, char* a, char* b)
{
    auto la = strlen(a);
    auto lb = strlen(b);
    
    c = new char[la + lb + 1];
    
    char *dst_first = c;
    char *dst_second = c + la;
    
    char cache = *b;
    
    for (; (*dst_first = *a) && (*dst_second = *b); ++a, ++b, ++dst_first, ++dst_second){
    }
    
    char *dst_adv = dst_second;
    char *src_adv = b;    
    if (*a) {
        dst_adv = dst_first;
        src_adv = a;
    }
    for (;(*dst_adv = *src_adv); ++dst_adv, ++src_adv){
    }
    *(c + la) = cache;
}

Я бы продолжил обсуждение с этого момента, поскольку последующие 6 страниц никаким конкретным кодом для моей ситуации не увенчались.
Тут у меня 2 вопроса:
1) длинновато
2) а есть ли необходимость в предложенном мной алгоритме с меньшим количеством итераций, или эффективнее будет просто пропустить 2 цикла сначала по a, а потом по b?
bugaboo на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MMX сложить два числа gansm Assembler 13 29.10.2010 05:16
как сложить два числа с плавающей точкой forsy Assembler 19 29.03.2010 02:15
Макрос: сложить два числа белочка Microsoft Office Excel 6 23.12.2009 23:02
Сложить два числа и вывести результат на экран We1c0m3 Assembler 2 23.05.2009 11:41
Сложить два числа iwaniwan Win Api 3 23.04.2009 06:27




00:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru