#503. Rewrite C To Rust - Simple Ver

内存限制:16 MiB 时间限制:50 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: jayfeather9

题目描述

为了实现重写 Rust 计划,这次小汀需要将 C 函数声明改写成 Rust 的格式。举例来说,对于 C 函数声明 int sum(int a,int b),Rust 格式下是 fn sum(a:i32,b:i32)->i32

Rust 的函数以 fn 关键字开始,紧接着函数名和一对小括号,如 fn main()。小括号内可以包括若干个函数参数,每个参数需要写成 name:type 的格式,以逗号分隔,其中 name 为参数名,type 为类型名。函数的返回值在最后以一个箭头符号和一个类型来标识,形如 -> type

因此,一个叫做 pow ,传入两个参数:单精浮点型 base 和整型 n,返回双精浮点型的函数就在 Rust 中写作fn pow(base:f32,n:i32)->f64。为了让你更好理解,该函数的 C 语言格式为 double pow(float base,int n)

本题中涉及到的 C 语言变量类型仅包括 int float double 三种,对应的 Rust 类型名为 i32 f32 f64,这三种变量类型都可以做函数返回值。

本题中也可能出现无返回值的函数。在 C 语言中,这种函数返回值是 void,而在 Rust 中,则只要不在结尾添加 ->type 即可表示无返回值,如 C 语言函数 void main() 的 Rust 形式为 fn main()

本题将会输入一个 C 语言函数声明,要求你将其转换为一个语义相同(返回值类型相同、函数名相同、各个参数名和对应的类型和参数顺序相同)的 Rust 函数声明,具体格式要求见下。

输入格式

输入共两行。

第一行一个数字 ,代表函数的参数个数。

第二行是对应的 C 语言函数声明,不包含大括号,不包含分号,不包含任何不必要的空格或换行(即除了区分字母与字母之外,字母和其他符号之间均没有空格)。

输出格式

输出一行,对应的 Rust 函数声明,不需要包含大括号或分号,请勿包含任何不必要的空格或换行(即除了 fn 后的空格外不存在其他空格),参考样例。

样例

【样例输入】

0
int main()

【样例输出】

fn main()->i32

【样例输入】

2
void sum(float a,double b)

【样例输出】

fn sum(a:f32,b:f64)

数据范围与提示

保证输入的 C 语言函数均如 ftype ident '(' [type ident{ ',' type ident}] ')' 所示,[] 代表其中的内容可以不出现或出现一次,{} 代表其中的内容可以不出现或出现若干次,'' 代表其中字符不作为标识符而是直接出现。

ftype 仅可能为这些值的任意一个:voidintfloatdouble

type仅可能为这些值的任意一个:intfloatdouble

ident 为由不少于 个,不多于 个的小写英文字母组成的单词,保证出现的每一个 ident 两两不同,保证不与 ftype 的任一可能值相同。相同指两个字符串长度相同且任意位置的字符都相同,不同指不相同。

一个可供参考的转换方式如下:

  1. 读入 C 语言函数,记录其返回值类型,函数名,每一个参数名与对应类型。
  2. 输出 fn,即 Rust 函数标识符关键字及一个空格。
  3. 输出函数名。
  4. 输出左小括号。
  5. 遍历每一个参数,对于每个参数:先输出参数名,再输出冒号,再输出其 C 类型对应的 Rust 类型,如果这不是最后一个参数,再输出逗号。
  6. 输出右小括号。
  7. 如果返回值不是 void ,输出减号和大于号(即->)后,输出 C 返回值类型对应的 Rust 类型。

类型对应关系为: int 类型对应 i32float 类型对应 f32double 类型对应 f64

通告标题

通告内容

已知晓