https://github.com/dunnock/rust_vs_cpp
https://github.com/dunnock/rust_vs_cpp
Last synced: 12 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/dunnock/rust_vs_cpp
- Owner: dunnock
- Created: 2023-10-09T10:33:09.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2023-10-09T11:48:01.000Z (almost 3 years ago)
- Last Synced: 2025-08-04T15:26:50.097Z (12 months ago)
- Language: Rust
- Size: 5.86 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# rust_vs_cpp
```c++
#include
#include
// Enum to represent a calculation operation
enum class Operation {
Add,
Subtract,
Multiply,
Divide,
};
// Function to perform a calculation and return an optional result
std::optional calculate(Operation op, double a, double b) {
switch (op) {
case Operation::Add:
return a + b;
case Operation::Subtract:
return a - b;
case Operation::Multiply:
return a * b;
case Operation::Divide:
if (b == 0.0) {
return std::nullopt; // Error: Division by zero
}
return a / b;
}
return std::nullopt; // Invalid operation
}
int main() {
std::cout << "Enter two numbers and an operation (+, -, *, /): ";
double num1, num2;
char op;
std::cin >> num1 >> num2 >> op;
Operation operation;
switch (op) {
case '+':
operation = Operation::Add;
break;
case '-':
operation = Operation::Subtract;
break;
case '*':
operation = Operation::Multiply;
break;
case '/':
operation = Operation::Divide;
break;
default:
std::cout << "Invalid operation" << std::endl;
return 1;
}
std::optional result = calculate(operation, num1, num2);
if (result.has_value()) {
std::cout << "Result: " << result.value() << std::endl;
} else {
std::cout << "Error: Division by zero or invalid operation" << std::endl;
}
return 0;
}
```
```rust
use std::io;
/// Enum to represent a calculation operation
enum Operation {
Add,
Subtract,
Multiply,
Divide,
}
// Function to perform a calculation and return an Option result
fn calculate(op: Operation, a: f64, b: f64) -> Option {
match op {
Operation::Add => Some(a + b),
Operation::Subtract => Some(a - b),
Operation::Multiply => Some(a * b),
Operation::Divide => (b != 0.0).then(|| a / b),
}
}
impl std::str::FromStr for Operation {
type Err = io::Error;
fn from_str(op: &str) -> Result {
match op {
"+" => Ok(Operation::Add),
"-" => Ok(Operation::Subtract),
"*" => Ok(Operation::Multiply),
"/" => Ok(Operation::Divide),
_ => Err(io::Error::new(io::ErrorKind::InvalidData, "unexpected operation")),
}
}
}
fn main() {
println!("Enter two numbers and an operation (+, -, *, /):");
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read input");
let parts: Vec<&str> = input.trim().split_whitespace().collect();
if parts.len() != 3 {
println!("Invalid input");
return;
};
let num1: f64 = parts[0].parse().expect("Invalid 1st number");
let num2: f64 = parts[1].parse().expect("Invalid 2nd number");
let operation: Operation = parts[2].parse().unwrap();
match calculate(operation, num1, num2) {
Some(result) => println!("Result: {}", result),
None => println!("Error: Division by zero or invalid operation"),
}
}
```