Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заменить подстроку на другую 
V
    Опции темы
GrayCardinal
Дата 26.3.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



День добрый !
(простите за тупой вопрос)
В буфере есть строка. В ней подстрока. Как заменить подстроку на какую-нибудь другую строку ? Можно ручками. НО. может спец функтяра есть в стандартном Си ?


--------------------
PM MAIL WWW   Вверх
zim22
Дата 26.3.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Код

#include <cstring>
char buffer[] = "MySuperString";
char *replace = "MeGGa";
strncpy(buffer+2, replace, strlen(replace));



--------------------
PM MAIL   Вверх
GrayCardinal
Дата 26.3.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



zim22
Лиж бы что сказать  smile 

Это сообщение отредактировал(а) GrayCardinal - 26.3.2009, 14:04


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 26.3.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



zim22,  я так пологаю автор просил для С, а не С++  smile 
PM MAIL   Вверх
GrayCardinal
Дата 26.3.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



похоже не я один сегодня туплю  smile  smile 


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 26.3.2009, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



чоорт  smile 

Это сообщение отредактировал(а) mrbrooks - 26.3.2009, 14:11
PM MAIL   Вверх
mes
Дата 26.3.2009, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(mrbrooks @  26.3.2009,  13:06 Найти цитируемый пост)
zim22,  я так пологаю автор просил для С, а не С++  smile  

ну так <cstring> заменить на <string.h> и в путь


Цитата(GrayCardinal @  26.3.2009,  13:04 Найти цитируемый пост)
zim22, 
Лиж бы что сказать  smile 

а что не устраивает то ?


--------------------
PM MAIL WWW   Вверх
GrayCardinal
Дата 26.3.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



Размер подстроки != размеру того чем заменяем.


--------------------
PM MAIL WWW   Вверх
Rififi
Дата 26.3.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



GrayCardinal
Стандартной функции нет, потому что в Си нет строк, только массивы, поэтому если заменяемая строка больше заменяемого фрагмента, то возникают сложности: если массив статический - то изменить  его размер невозможно, а если динамический - то неизвестно каким образом для него была выделена память, и к тому же при переаллокации теряется исходный адрес указателя.

выход: ручками или c++
PM MAIL   Вверх
mrbrooks
Дата 26.3.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



GrayCardinal, камрад - сама идея тебе предоставлена - нюансы - это уже по твоей части  smile 
PM MAIL   Вверх
GrayCardinal
Дата 26.3.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



Rififi
Не подскажешь как это в Си++ выглядеть будет ? Надо си->Си++-> и вернуть обратно сишную строку в тот же буфер.

Добавлено через 1 минуту и 1 секунду
mrbrooks
У меня идей уже знаешь сколько ? Жарить на завтрак можно  smile 


--------------------
PM MAIL WWW   Вверх
mes
Дата 26.3.2009, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(GrayCardinal @  26.3.2009,  13:19 Найти цитируемый пост)
ак это в Си++ выглядеть будет ?

http://cplusplus.com/reference/string/string/replace.html


--------------------
PM MAIL WWW   Вверх
mrbrooks
Дата 26.3.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(GrayCardinal @  26.3.2009,  14:19 Найти цитируемый пост)
Не подскажешь как это в Си++ выглядеть будет ? Надо си->Си++-> и вернуть обратно сишную строку в тот же буфер.

ну если все таки С++ то тогда std::string и его метод relace() - должен решить проблему.

PM MAIL   Вверх
Rififi
Дата 26.3.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



GrayCardinal
на "голом" C:
1. подсчитать общую длину результирующей строки (с учётом завершающего нулевого символа)
2. скопировать в рез-строку символы из исходной до начала заменяемого фрагмента (strcpy)
2. добавить к рез-строке то, на что заменяем (strcat)
3. добавить к рез-строке остаток символов из исходной строки после заменяемого фрагмента
4. освободить исходный буфер (если требуется)
5. переприсвоить указатели (опционально)

иначе см. выше про std:string

Это сообщение отредактировал(а) Rififi - 26.3.2009, 14:27
PM MAIL   Вверх
GrayCardinal
Дата 26.3.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



ОК. Вроде понял куда копать. Спасибо всем...


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0986 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.