#файлы #матрицы #rust
Содержимое файла, матрица квадратная, в первой строке после # указан размер. #3 1.1 -0.2 0.1 0.1 -1.2 -0.2 0.2 -0.1 1.1 Примерно так я бы считал ее на Си. double **A; int i,j,size=0; FILE *f=NULL; f=fopen("input.txt","w"); fscanf(f,"#%d\n",&size); A=(double**)malloc(size*sizeof(double*)); for(i=0;iОтветы
Ответ 1
Перевод моего кода с Си на Rust use std::fs::File; use std::io::{BufRead, BufReader}; fn main() { // open the file let mut f = BufReader::new(File::open("input.txt").unwrap()); // read the first line and extract the number from it let mut num_line = String::new(); f.read_line(&mut num_line).unwrap(); let n: usize = num_line[1..].trim().parse().unwrap(); // preallocate the array and read the data into it let mut arr = vec![vec![0f64; n]; n]; for (i, line) in f.lines().enumerate() { for (j, number) in line.unwrap().split(char::is_whitespace).enumerate() { arr[i][j] = number.trim().parse().unwrap(); } } println!("{:?}", arr); } Более характерный код для Rust use std::fs::File; use std::io::{BufRead, BufReader}; fn main() { let mut f = BufReader::new(File::open("input.txt").unwrap()); let mut num_line = String::new(); f.read_line(&mut num_line).unwrap(); let n: usize = num_line[1..].trim().parse().unwrap(); let arr: Vec> = f.lines() .take(n) .map(|l| l.unwrap().split(char::is_whitespace) .take(n) .map(|number| number.parse().unwrap()) .collect()) .collect(); println!("{:?}", arr); } Без учета размерности, указанной в первой строке use std::fs::File; use std::io::{BufRead, BufReader}; fn main() { let mut f = BufReader::new(File::open("input.txt").unwrap()); let mut s = String::new(); f.read_line(&mut s).unwrap(); let arr: Vec > = f.lines() .map(|l| l.unwrap().split(char::is_whitespace) .map(|number| number.parse().unwrap()) .collect()) .collect(); println!("{:?}", arr); }
Комментариев нет:
Отправить комментарий