On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 25.12.14 22:50. Заголовок: Как втсавить пробелы между символами в строке


Основная масса задач для начинающих связана с написанием циклов. И хотя много подобных задач можно сделать с помощью стандартных алгоритмов, тем не менее иногда простые циклы оказываются вполне достойным решением.

Одна из таких задач следующая: как вставить пробелы между символами строки. Например, допустим, у вас есть строка
 
std::string s( "abcdef" );

Нужно преобразовать эту строку к виду
 
"a b c d e f"


Прямолинейный и тем не менее достаточно эффективный подход следующий. Нужно сначала увеличить строку на число требуемых пробелов, а затем с помощью функции std::swap сделать перестановку исходных символов строки с пробелами так, чтобы они чередовались.

Например
 
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] );
}

Этот код можно оформить в виде отдельной функции. Ниже приведена соответствующая демонстрационная программа.
 
#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;
}


Результатом работы программы будет следующий вывод на консоль:
 
"abcdef"
"a b c d e f"


В JavaScript эту операцию можно выразить одной строкой:
 
var s = "abcdef";
s = s.split( "" ).join( " " );

alert( s );


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет