7-18 对象关系映射(orm_name)---PTA实验C++

一、题目描述

一开始看到对象关系映射,其实我是拒绝的。这三个词凑一块,能是给C++初学者的题吗?

再仔细读需求,才发现在课设项目已经用过这功能。Object Relational Mapping(ORM)就是面向对象(OO)侧的模型类、对象、属性与数据库(DB)的表(关系)、记录(行)、列对应,由ORM框架完成两侧的相互转换。

语言侧标识符区分大小写,使用驼峰表示法。而数据库的标识符不区分大小写,要用下划线分隔单词。例如:

  • 语言中的属性studentId,对应数据库的student_id。就是大写字母要改成小写,并且如果不是首个字母,还要在前面追加一个下划线。
  • 语言侧的类名StudentHonor,对应数据库的表名student_honor,对应。与属性不同,类名首字母要大写。

这种标识符映射在做课设项目特别是Repository类里惹了不少乱子。为了彻底弄清这个知识点,亲自实现标识符映射功能是个好办法。

先导题:标识符。

输入规格
  • 每行一组数据,读取到EOF为止。
  • 每组数据有类型、标识符两个字符串,间隔若干空白符。
    • 类型:class field table column四种之一。
    • 标识符:待转换的字符串。
  • 本题不考察算法的时空复杂度。
输出规格
  • 每行输出一组转换结果。
样例输入
class StudentHonor
field studentId
table course
column pre_course_id
样例输出
table student_honor
column student_id
class Course
field preCourseId
样例解释
  • 第1组:class对应table,字母全改成小写,中间的大写字母前要插入下划线分割。
  • 第2组:field对应column,同上。
  • 第3组:table对应class,首字母大写,去掉下划线,下划线后续字母也大写。
  • 第4组:column对应field,去掉下划线,下划线后续字母改大写。

二、注意事项

str一次只能拼接一个变量值,否则会出现乱码

str+='_';

str+=c;

三、完整C++代码实现

#include<iostream>
using namespace std;
#include<string>
string t_x(string s){
    string str="";
    for(int i=0;i<s.size();i++){
        char c=s[i];

        if(c>='A'&&c<='Z'){
            c+=32;
            if(i!=0){
                str+='_';
                str+=c;
            }else{
                str+=c;
            }
        }else{
            str+=c;
        }

    }
    return str;
}
string x_t(string type,string s){
    string str="";
    for(int i=0;i<s.size();i++){
        char c=s[i];
        if(i==0&&type=="table"){
            c-=32;
        }
        if(c=='_'){
           i++;
           c=s[i]-32;
           str+=c;
        }else{
            str+=c;
        }

    }

    return str;
}
string x_t_2(string s){

}

int main(){
    string type,id;
    while(cin>>type>>id){
        if(type=="class"){
            cout<<"table"<<" "<<t_x(id)<<endl;
        }else  if(type=="field"){
            cout<<"column"<<" "<<t_x(id)<<endl;
        } if(type=="table"){
            cout<<"class"<<" "<<x_t(type,id)<<endl;
        } if(type=="column"){
            cout<<"field"<<" "<<x_t(type,id)<<endl;
        }
    }


}

四、测评详情

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xixixiLucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值