2012-06-04 2 views
1

Я хочу, чтобы заменить строку text=s_o_m_e=text с text=s-o-m-e=textЗаменить символы, как replaceAll (строка, начало, конец, '_', '-')

У меня есть начальный и конечный индекс:

std::string str("text=s_o_m_e=text"); 

std::string::size_type start = str.find("text="), end; 

if (start != std::string::npos) { 
    end = str.find("=", start); 

    if (end != std::string::npos) { 
     //... 
    } 
} 

Итак, я ищу функцию, как это:

replaceAll(string, start, end, '_', '-'); 

UP:

Спасибо, Blastfurnace

+1

Точный дубликат [этот вопрос] (http://stackoverflow.com/questions/2896600/how-to-replace-all-occurrences-of-a-character-in-string). –

ответ

10

Там есть функция <algorithm> для этого.

std::replace(str.begin(), str.end(), '_', '-'); 
+0

Больше thx! Итак, мое решение: 'std :: replace (str.begin() + start, str.end() + end, '_', '-');' – Duglas

+4

@Duglas: вы не хотите ссылаться на прошлый конец строки. Поскольку вы используете смещения, я думаю, что вы хотите 'std :: replace (str.begin() + start, str.begin() + end, '_', '-');' – Blastfurnace

+0

Существует огромное ограничение использования std :: replace, old_string и new_string должны иметь одинаковую длину. т. е. std :: replace (my_str.begin(), my_str.end(), «старая строка», «не может касаться этого»); будет сбой при выводе аргумента шаблона, т. е. «сбой аргумента шаблона/замещения»: примечание: выведенные конфликтующие типы для параметра «const _Tp» («char [11]» и «char [17]») « – bitek

5

std::replace. Here - подробнее.

+1

+1, Хорошая ссылка. – Blastfurnace

+0

-1, Плохой ответ: небольшой фрагмент, чтобы показать, как его использовать, сделает его намного лучше. –

+0

+1, Хороший ответ: нужно научиться использовать документацию. –

Смежные вопросы