Кресты / Говнокод #9153 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 FalseCoder, (Updated )

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

  • один из примеров, когда имеет смысл подумать и написать самому, а не брать готовые решения.
    кстати, еще вопрос. где используется эта функция? если размер строки может измеряться сотнями килобайт, то вообще стоит написать что-то вроде
    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 у тех, кому повезло

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

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8