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

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

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

Ответ
 
Опции темы
Старый 12.10.2017, 21:31   #1
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 110
Репутация: 10
По умолчанию Скопировать подстроку

Добрый вечер, форумчане.

Столкнулся с такой задачей - нужно из строки *src в строку *dest скопировать подстроку с n-ого символа (пусть будет явная тройка) до сепаратора (пусть будет пробел).
Решил не совсем красиво, как мне кажется.

Код:

void take_substr(char *src, char *dest)
{  
    int i;  
    char *new_src = src + 3;

    for ( i = 0; new_src[i] != ' '; i++)
        dest[i] = new_src[i];
}

Как обойтись без переменной new_src?
Может есть способ изящнее (библиотечная функция), без плясок с for?

Заранее спасибо
Bayern_M вне форума   Ответить с цитированием
Старый 13.10.2017, 00:21   #2
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 6,742
Репутация: 1909

icq: 100500
skype: kick-ass
По умолчанию



47.png
__________________
Чтобы правильно заниматься всякой фигнёй на работе (и дома тоже),
нужно долго и кропотливо учиться!
min@y™ вне форума   Ответить с цитированием
Старый 13.10.2017, 09:30   #3
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 110
Репутация: 10
По умолчанию

Strncpy копирует строго n байт, а я не знаю когда у меня встретится сепаратор.
Bayern_M вне форума   Ответить с цитированием
Старый 13.10.2017, 10:40   #4
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 6,742
Репутация: 1909

icq: 100500
skype: kick-ass
По умолчанию

Цитата:
Сообщение от Bayern_M Посмотреть сообщение
Strncpy копирует строго n байт, а я не знаю когда у меня встретится сепаратор.
Безымянный.jpg
__________________
Чтобы правильно заниматься всякой фигнёй на работе (и дома тоже),
нужно долго и кропотливо учиться!
min@y™ вне форума   Ответить с цитированием
Старый 13.10.2017, 19:55   #5
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 110
Репутация: 10
По умолчанию

Спасибо за ценный экскурс по string.h, а то я его вот не видел никогда.
Вопрос был в другом. Что отработает быстрее:

Код:

strncpy(dest, src + 3, strchr(src + 3, ' ') - (src+3) );

Или написанный мною вариант?

Напоминаю, что топик про то, как не заводить лишнюю переменную.

Прошу объяснить нормально или хотя бы скинуть ссылки для чтения.
Bayern_M вне форума   Ответить с цитированием
Старый 13.10.2017, 20:15   #6
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 6,742
Репутация: 1909

icq: 100500
skype: kick-ass
По умолчанию

Цитата:
Сообщение от Bayern_M Посмотреть сообщение
Напоминаю, что топик про то, как не заводить лишнюю переменную.
Прошу объяснить нормально или хотя бы скинуть ссылки для чтения.
iagf02mz.jpg
__________________
Чтобы правильно заниматься всякой фигнёй на работе (и дома тоже),
нужно долго и кропотливо учиться!
min@y™ вне форума   Ответить с цитированием
Старый 13.10.2017, 20:24   #7
Bayern_M
Форумчанин
 
Регистрация: 18.03.2015
Сообщений: 110
Репутация: 10
По умолчанию

ЧСВ своё угомони, Вася))
Bayern_M вне форума   Ответить с цитированием
Старый 13.10.2017, 20:29   #8
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 6,742
Репутация: 1909

icq: 100500
skype: kick-ass
По умолчанию

Цитата:
Сообщение от Bayern_M Посмотреть сообщение
ЧСВ своё угомони, Вася))
__________________
Чтобы правильно заниматься всякой фигнёй на работе (и дома тоже),
нужно долго и кропотливо учиться!
min@y™ вне форума   Ответить с цитированием
Старый 14.10.2017, 09:06   #9
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 528
Репутация: 107
По умолчанию

Примите как данность, ваш велосипед не будет быстрее библиотечной функции в ближайшие 15 лет пользования С++. Потом - возможно, но это уже будет другой велик.
А померять можно штатными средствами - засечь время до и после вызова ф. И не забыть включить опптимизацию -О3, чтобы раскрыть весь потенциал.
alexzk вне форума   Ответить с цитированием
Ответ



Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подстроку из строки kostya67 C# (си шарп) 1 15.09.2014 19:33
Удалить подстроку из строки с++ Voxa7 Помощь студентам 0 09.11.2011 20:34
Выделить подстроку Jeniuz Общие вопросы C/C++ 1 04.12.2009 19:25
Вывести подстроку из строки Mashul'ka Помощь студентам 1 13.05.2009 22:17
удалить подстроку в VBA AnnNet Помощь студентам 1 19.01.2009 17:59




18:33.


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

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


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

RusProfile.ru


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