1. C++ / Говнокод #9153

    +156

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    string Delimiter(string Text, int Index, const char* Delimiter) {
    	int n = 0, find = 0;
    	for (int i = 0; i <= Index; i++) {
    		find = Text.find(Delimiter, n);
    		if (i == Index) {  
    			return Text.substr(n, find - n);
    		}
    		n = find + 1;
    	}
    	return "";
    }

    Запостил: FalseCoder, 17 Января 2012

    Комментарии (6) RSS

    • код типа ищет i-тый кусок строки, куски разделены делимитерами?
      Ответить
    • один из примеров, когда имеет смысл подумать и написать самому, а не брать готовые решения.
      кстати, еще вопрос. где используется эта функция? если размер строки может измеряться сотнями килобайт, то вообще стоит написать что-то вроде
      string NextDelimiter(const string Text, int &idx, const char *delimiter){...}
      и перебор в таком виде: for(int i = 0; i >= 0;) NextDelimiter(Text, i, ",");
      да, еще разделитель строка или символ (реально что используется)?
      Ответить
      • в зависимости от того, чем является Delimiter, готовые решения как раз неплохо было бы рассмотреть
        Ответить
        • > не брать готовые решения.
          поясню. искать таким образом i-й кусок строки. тут же даже не квадратичная сложность (учитывая внешний цикл). а можно добиться близкого к линейному.
          понятно что все это имеет смысл при больших объемах данных. для разового разбора строки из 100 символов и так пойдет.
          Ответить
          • не понятно что конкретно ты пояснил
            я в курсе, что существуют хорошие алгоритмы поиска подстроки в строке, на той же педивикии с десяток рассмотрено
            при этом алгоритм в лоб обычно удовлетворителен, в зависимости какая задача и какие требования к производительности
            только вот если делимитер вовсе не подстрока, а чар/набор чаров, то готовые решения гораздо предпочтительней очередного велосипеда - начиная от банального сишного strtok (thread safe/unsafe варианты) - есть у всех, заканчивая boost::split/boost::tokenize у тех, кому повезло

            зы - алгоритм в лоб конечно != коду в топике
            Ответить

    Добавить комментарий