Форум » C/C++ для начинающих (C/C++ for beginners) » Как втсавить пробелы между символами в строке » Ответить

Как втсавить пробелы между символами в строке

Сыроежка: Основная масса задач для начинающих связана с написанием циклов. И хотя много подобных задач можно сделать с помощью стандартных алгоритмов, тем не менее иногда простые циклы оказываются вполне достойным решением. Одна из таких задач следующая: как вставить пробелы между символами строки. Например, допустим, у вас есть строка [pre2] std::string s( "abcdef" ); [/pre2] Нужно преобразовать эту строку к виду [pre2] "a b c d e f" [/pre2] Прямолинейный и тем не менее достаточно эффективный подход следующий. Нужно сначала увеличить строку на число требуемых пробелов, а затем с помощью функции std::swap сделать перестановку исходных символов строки с пробелами так, чтобы они чередовались. Например [pre2] auto n = s.size(); s.resize( 2 * n - 1, ' ' ); for ( auto i = n, j = s.size(); i != j; --j ) { std::swap( s[--i], s[--j] ); } [/pre2] Этот код можно оформить в виде отдельной функции. Ниже приведена соответствующая демонстрационная программа. [pre2] #include <iostream> #include <string> #include <utility> std::string & dilute_string( std::string &s, char c = ' ' ) { if ( !s.empty() ) { auto n = s.size(); s.resize( 2 * n - 1, c ); for ( auto i = n, j = s.size(); i != j; --j ) { std::swap( s[--i], s[--j] ); } } return s; } int main() { std::string s( "abcdef" ); std::cout << "\"" << s << "\"" << std::endl; std::cout << "\"" << dilute_string( s ) << "\"" << std::endl; return 0; } [/pre2] Результатом работы программы будет следующий вывод на консоль: [pre2] "abcdef" "a b c d e f" [/pre2] В JavaScript эту операцию можно выразить одной строкой: [pre2] var s = "abcdef"; s = s.split( "" ).join( " " ); alert( s ); [/pre2]

Ответов - 0



полная версия страницы