样例全过,提交0分,求大佬修改!
查看原帖
样例全过,提交0分,求大佬修改!
724855
estar_17k楼主2024/6/25 20:37
#include<iostream>
using namespace std;
struct s //用来读入字典
{
    string n,m;
}p[105];
int main(){
    int a;
    string b,c="",d=""; //b是读入的需要翻译的句子,c是截取字符间的子串的,d是存正确答案的
    cin>>a;
    for(int i=0;i<a;i++)cin>>p[i].n>>p[i].m; //输入字典
    cin>>b; //3行输入
    b=b+'.'; //为32行做铺垫
    int t=b.size();
    for(int i=0;i<t;i++){
        if(b[i]>96 && b[i]<123) //读入子串
            c=c+b[i];
        else{ //如果是标点?
            if(c==""){ //判断连续标点,防止后面多个"UNK"
                d=d+b[i];
                continue;
            }
            int k=0; //用来计是不是每种字典单词都不满足
            for(int j=0;j<a;j++){
                if(c==p[j].n){ //判断与字典中元素是否相同,相同将子串进行翻译,读入正确答案(字符串d)
                    d=d+p[j].m;
                    c=""; //清空子串
                }
                else k++; //不满足就加1
            }
            if(k==a)d=d+"UNK"; //判断是不是都不满足,不满足则将"UNK"写入正确答案(字符串d)
            if(i==t-1 && b[i]=='.')break; //前面13行提前写过,防止最后一个子串多打一个标点,下面就已经写入标点了,所以写在这上面?
            else d=d+b[i]; //写最后一个标点
        }
    }
    cout<<d; //打印正确答案
    return 0;
}
2024/6/25 20:37
加载中...