2017-01-05 5 views
1

Я читал на format! и все formatting options и увидел там был прекрасный способ центрирования строки текста с использованием либо <, ^ или >. Вместо того, чтобы центрировать строку в пробеле, можно ли центрировать ее в символе?Center Rust строка в количестве символов

{:^32} // Centers it nicely in 32 characters of whitespace 

я что-то вроде думать:

{:^32'c'} // But this does not work 

Я попытался почти каждый путь мыслимо, за исключением тех, которые кажутся слишком сумасшедшими. Но, к счастью, есть Переполнение стека!

Можно ли центрировать строку, используя числа, чтобы добиться чего-то вроде следующего?

-------- ТАК УДИВИТЕЛЬНЫЙ --------

+0

И поэтому @Shepmaster на этом исправляет мой стиль снова. :-) –

+1

Вы найдете мою руку в большинстве вопросов SO в [тег: ржавчина]. Я стараюсь обеспечить единый стиль и улучшить грамматику каждого поста, в надежде сделать каждый вопрос и ответ полезным тем, кто приходит за нами. – Shepmaster

ответ

4

Можно ли центрировать строку, используя номера, чтобы добиться чего-то вроде следующего?

Да, вроде, до тех пор, как вы на самом деле значит "что-то вроде" ...

fn main() { 
    let s = format!("{:-^30}", "SO is AWESOME"); 
    assert_eq!(s, "--------SO is AWESOME---------"); 
    //    ^-- 8 here   ^-- 9 here 
} 

Обращаясь к formatting syntax, вот соответствующие части:

format_spec := [[fill]align][sign]['#']['0'][width]['.' precision][type] 
fill := character 
align := '<' | '^' | '>' 
width := count 

Мы указываем a заполнение (-), a выравнивание (^/center) и ширина (30). Тем не менее, строка имеет ширину 13 единиц, поэтому для ее заполнения до 30 единиц заполнение должно быть больше с одной стороны.

+0

Это хорошо работает для меня! Конечно, если бы у кого-то было время, они могли бы сделать метод (или функцию в этом отношении), используя ваш пример, чтобы всегда печатать центрированные строки с одинаковой суммой заданного символа с обеих сторон. Это не должно быть дальше, чем небольшой контроль потока. :-) –