HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #37  
Старый 23.06.2009, 00:02
[n]-c0der
Участник форума
Регистрация: 03.02.2009
Сообщений: 104
Провел на форуме:
270228

Репутация: 70
По умолчанию

Цитата:
Сообщение от rudvil  
Воть, обновленная версия реплейсера переписал все с нуля - повышена скорость работы, меньше строчек кода.

Replace (Исходник, НайтиЧто, ЗаменитьЧем);

Пример:
Код:
string hello = "Hello World!";
Replace(hello, "o", "_");
cout << hello << endl;
выведет: Hell_ W_rld!

и ещё

string hello = "Hello Worlld!";
Replace(hello, "ll", "[*]");
cout << hello << endl;
выведет: He[*]o Wor[*]d!
Исходник:
Код:
#include <iostream>
#include <string>

using namespace std;

void Replace (string& source, string find_what, string replace_with) {
    if (source == "" || find_what == "") {
        return;
    }
    if (source == find_what) {
        source = replace_with;
        return;
    }
    unsigned int findwhat_index = 0,
    start_index = 0,
    find_length = find_what.length(),
    flag = 0;
    for (unsigned int i = 0; i < source.length(); i++ ) {
        switch (flag) {
            case 0:
                if (source.at(i) == find_what.at(0) && find_length == 1) {
                    source = source.replace(i, 1, replace_with);
                }
                else if (source.at(i) == find_what.at(0)) {
                    start_index = i;
                    findwhat_index++;
                    flag = 1;
                }
                break;
            case 1:
                if (source.at(i) == find_what.at(findwhat_index) && findwhat_index < (find_length - 1)) {
                    findwhat_index++;
                }
                else if (source.at(i) == find_what.at(findwhat_index) && findwhat_index == (find_length - 1)) {
                    source = source.replace(start_index, find_length, replace_with);
                    findwhat_index = 0;
                    start_index = 0;
                    flag = 0;
                }
                else {
                    findwhat_index = 0;
                    start_index = 0;
                    flag = 0;
                }
                break;
        }
    }
}
Не считаю хорошей идеей использовать в этой функции тип string ((..
ИМХО лучше реализовать с char;
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
О законе. _-[A.M.D]HiM@S-_ Статьи 38 05.11.2015 23:18
Хакер и закон! SladerNon Болталка 17 12.11.2009 09:42
Обзор бесплатных Cms em00s7 PHP 16 03.07.2009 13:13
Программы для работы с железом. Часть I – настройка видеокарт _GaLs_ "Железо" 2 20.12.2006 01:18
Программы для работы с железом. Часть 2 – материнские платы _GaLs_ "Железо" 0 19.11.2006 12:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ