mirror of
https://github.com/sunface/rust-by-practice.git
synced 2025-06-23 20:49:41 +00:00
add chapter [formatting]
This commit is contained in:
140
solutions/formatted-output/formatting.md
Normal file
140
solutions/formatted-output/formatting.md
Normal file
@ -0,0 +1,140 @@
|
||||
1.
|
||||
```rust
|
||||
fn main() {
|
||||
println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");// => Alice, this is Bob. Bob, this is Alice
|
||||
assert_eq!(format!("{1}{0}", 1, 2), "21");
|
||||
assert_eq!(format!("{1}{}{0}{}", 1, 2), "2112");
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
2.
|
||||
```rust
|
||||
fn main() {
|
||||
println!("{argument}", argument = "test"); // => "test"
|
||||
|
||||
assert_eq!(format!("{name}{}", 1, name = 2), "21");
|
||||
assert_eq!(format!("{a} {c} {b}",a = "a", b = 'b', c = 3 ), "a 3 b");
|
||||
|
||||
// named argument must be placed after other arguments
|
||||
println!("{abc} {0}", 2, abc = "def");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
3.
|
||||
```rust
|
||||
fn main() {
|
||||
// the following two are padding with 5 spaces
|
||||
println!("Hello {:5}!", "x"); // => "Hello x !"
|
||||
println!("Hello {:1$}!", "x", 5); // => "Hello x !"
|
||||
|
||||
assert_eq!(format!("Hello {1:0$}!", 5, "x"), "Hello x !");
|
||||
assert_eq!(format!("Hello {:width$}!", "x", width = 5), "Hello x !");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
4.
|
||||
```rust
|
||||
fn main() {
|
||||
// left align
|
||||
println!("Hello {:<5}!", "x"); // => Hello x !
|
||||
// right align
|
||||
assert_eq!(format!("Hello {:>5}!", "x"), "Hello x!");
|
||||
// center align
|
||||
assert_eq!(format!("Hello {:^5}!", "x"), "Hello x !");
|
||||
|
||||
// left align, pad with '&'
|
||||
assert_eq!(format!("Hello {:&<5}!", "x"), "Hello x&&&&!");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
5.
|
||||
```rust
|
||||
fn main() {
|
||||
println!("Hello {:5}!", 5); // => Hello 5!
|
||||
println!("Hello {:+}!", 5); // => Hello +5!
|
||||
println!("Hello {:05}!", 5); // => Hello 00005!
|
||||
println!("Hello {:05}!", -5); // => Hello -0005!
|
||||
|
||||
assert!(format!("{number:0>width$}", number=1, width=6) == "000001");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
6.
|
||||
```rust
|
||||
fn main() {
|
||||
let v = 3.1415926;
|
||||
|
||||
println!("{:.1$}", v, 4); // same as {:.4} => 3.1416
|
||||
|
||||
assert_eq!(format!("{:.2}", v), "3.14");
|
||||
assert_eq!(format!("{:+.2}", v), "+3.14");
|
||||
assert_eq!(format!("{:.0}", v), "3");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
7.
|
||||
```rust
|
||||
fn main() {
|
||||
let s = "Hello, world!";
|
||||
|
||||
println!("{0:.5}", s); // => Hello
|
||||
|
||||
assert_eq!(format!("Hello {1:.0$}!", 3, "abcdefg"), "Hello abc!");
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
8.
|
||||
```rust
|
||||
fn main() {
|
||||
assert_eq!(format!("{:#b}", 27), "0b11011");
|
||||
assert_eq!(format!("{:#o}", 27), "0o33");
|
||||
assert_eq!(format!("{:#x}", 27), "0x1b");
|
||||
assert_eq!(format!("{:#X}", 27), "0x1B");
|
||||
|
||||
println!("{:x}!", 27); // hex with no prefix => 1b
|
||||
|
||||
println!("{:#010b}", 27); // pad binary with 0, width = 10, => 0b00011011
|
||||
|
||||
println!("Success!")
|
||||
}
|
||||
```
|
||||
|
||||
9.
|
||||
```rust
|
||||
fn get_person() -> String {
|
||||
String::from("sunface")
|
||||
}
|
||||
|
||||
fn get_format() -> (usize, usize) {
|
||||
(4, 1)
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
let person = get_person();
|
||||
println!("Hello, {person}!");
|
||||
|
||||
let (width, precision) = get_format();
|
||||
let scores = [("sunface", 99.12), ("jack", 60.34)];
|
||||
/* Make it print:
|
||||
sunface: 99.1
|
||||
jack: 60.3
|
||||
*/
|
||||
for (name, score) in scores {
|
||||
println!("{name}: {score:width$.precision$}");
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user