翻译计划

    小明初学者C++,它确定了四个算术、关系运算符、逻辑运算、颂值操作、输入输出、使用简单的选择和循环结构。但他的英语不是很好,记住太多的保留字,他利用汉语拼音的保留字,小屋C++,发明了一种表达自己思想的算法描写叙述规则。

    规则非常easy:他将開始程序头部以一个拼音名字标记,C++程序中的"{,}"用拼音“kaishi,jieshu”直观表示。选择和循环仅仅採用一种单一的结构,且保留字也分别用相应的拼音表示,只是在表示选择或循环条件时他去掉了多余的小括号;输入输出也用拼音表示。数据类型仅仅保留了整型(int)和实型(float),并用拼音表示,且按他的习惯变量在前,类型在后。

如今小明想请熟悉C++的你帮他写一个程序,将用他设计的算法描写叙述规则写成的算法。翻译成C++源代码。输入文件扩展名为.ming。输出文件扩展名为.cpp,例如以下例:

小明算法(test.ming):

chengxu1

kaishi

   i,j zhengxing;

   k   shixing;

   i=1;j=0;

   shuru k;  

   xunhuan i<10

   kaishi

      j=j+i;

      i++;

   jieshu

   ruguo j>10

   kaishi

     k=j*1.0/i;    

   jieshu  

   shuchu k,j;

jieshu

翻译成的C++源代码(test.cpp):

#include <iostream>

using namespace std;

int main()

{

    int i,j;

    float k;

    i=1;j=0;

    cin>>k;

    while( i<10)

    {

       j=j+i;

       i++;

    }

   if(j>10)

     k=j*1.0/i;

   cout<<k<<j;

    return 0;

}

參考代码:

#include <iostream>
#include <string>
#include <fstream>
#define max_size 30
#define MaxNum 9 using namespace std; string Ming[MaxNum]={
"chengxu1",//
"kaishi",
"jieshu",
"xunhuan",
"shuru",
"shuchu",
"ruguo",
"zhengxing",
"shixing"
};
string Cpp[MaxNum]={
"#include <iostream>\n#include <string>\nusing namespace std;\nvoid main()",
"{",
"}",
"while(",
"cin>>",
"cout<<",
"if(",
"int",
"float"
}; void GetNextval(string &line,int nextval[])//对模式串求next[]值
{
int j=0,k=-1;
nextval[0]=-1;
while(j<line.length())
{
if(k==-1 || line[j]==line[k])//k为-1或字符相等时
{
j++;
k++;
if(line[j]!=line[k])
nextval[j]=k;
else
nextval[j]=nextval[k];
}
else k=nextval[k];
}
} int KMP(string &substr,string &line)//kmp算法实现
{
int sl=substr.length();
int ll=line.length();
int nextval[max_size],i=0,j=0;
GetNextval(line,nextval);
while(i< sl&& j<ll)
{
if(j==-1 || substr[i]==line[j])
{
i++;
j++;
}
else
{
j=nextval[j];
}
sl=substr.length();
ll=line.length();
}
if(j>=line.length())
return (i-line.length());//返回匹配模式串的首字符下标
else return -1;//返回不匹配标志
}
void Read(FILE *pf)
{ FILE *pf2 = fopen("test.txt", "w");
if(pf2 == NULL) {
printf("文件写入失败!\n");
fclose(pf);
exit(0);
} char ch;
while(!feof(pf)) {
ch = fgetc(pf);
putchar(ch);
fputc(ch, pf2);
} fclose(pf2);
fclose(pf); cout<<"文件已成功写入! "<<endl; } int main()
{
ifstream in("test.ming");
string line;
int next[max_size];
ofstream output("test.cpp");//
while(getline(in,line))//传參:文件。每一行
{ bool fenhao;
if(line[line.length()-1]==';')
fenhao=true;
else fenhao=false;
bool go=false;
for(int m=0;m<9;m++)
{
int i;
int x=KMP(line,Ming[m]);
if(x!=-1)
{
go=true;
if(m==0||m==1)//chengxu1
{
for(i=0;i<x;i++)//kongge
{
output<<line[i];
}
output<<Cpp[m]; }
/*else if(m==1)//kaishi
{
output<<Cpp[1]; }*/
else if(m==3)//xunhuan
{
for(i=0;i<x;i++)//kongge
{
output<<line[i];
}
output<<Cpp[3];
for(i=x+7;i<line.length();i++)
{
output<<line[i];
}
output<<")"; }
else if(m==2)//jieshu
{
for(i=0;i<x;i++)
{
output<<line[i];
}
output<<Cpp[2]; }
else if(m==4)//shuru
{
for(i=0;i<x;i++)//kongge
{
output<<line[i];
}
output<<Cpp[4];
for(i=x+5;i<line.length();i++)
{
if(line[i]==',') output<<">>";
else if(line[i]==';') break;
else output<<line[i];
} }
else if(m==5)//shuchu
{
for(i=0;i<x;i++)//kongge
{
output<<line[i];
}
output<<Cpp[5];
for(int i=x+6;i<line.length();i++)
{
if(line[i]==',') output<<"<<";
else if(line[i]==';') break;
else output<<line[i]; } }
else if(m==6)//ruguo
{
for(i=0;i<x;i++)
{
output<<line[i];
}
output<<Cpp[6];
for(i=x+5;i<line.length();i++)
{
output<<line[i];
}
output<<")";
}
else if(m==7)//zhengxing
{
for(i=0;i<x-4;i++)//kongge
{
output<<line[i];
}
output<<Cpp[7];
for(i=0;i<x;i++)
{
output<<line[i];
} }
else if(m==8)//shixing
{
for(i=0;i<x-4;i++)//kongge
{
output<<line[i];
}
output<<Cpp[8];
for(i=0;i<x;i++)
{
output<<line[i];
} }
else cout<<"文件读取错误。"<<endl;
}
}
if(!go) output<<line;
if(fenhao&&go) output<<";";
output<<endl;
}
in.close();
FILE *pf= fopen("test.cpp", "r");
Read(pf);
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

实验数据结构——KMP算法Test.ming的更多相关文章

  1. 数据结构--KMP算法总结

    数据结构—KMP KMP算法用于解决两个字符串匹配的问题,但更多的时候用到的是next数组的含义,用到next数组的时候,大多是题目跟前后缀有关的 . 首先介绍KMP算法:(假定next数组已经学会, ...

  2. 数据结构——KMP算法

    算法介绍 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  3. 数据结构-kmp算法

    定义 改进字符串的匹配算法 关键:通过实现一个包含了模式串的局部匹配信息的next()函数,利用匹配失败的信息,减少匹配次数. 1.BF算法 暴力匹配 给定 文本串S "BBC ABCDAB ...

  4. <数据结构>KMP算法

    next数组 定义 严格定义:next[i]表示使子串s[0...k] == s[i-k...i]的最大的k(前后缀可以重叠,但不能是s[0..i]本身) 含义:最长相等前后缀的下标,没有则赋-1 图 ...

  5. 大话数据结构——KMP算法(还存在问题)

    http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html /*#include& ...

  6. 数据结构KMP算法中手算next数组

    总结一下今天的收获(以王道数据结构书上的为例子,虽然我没看它上面的...):其中竖着的一列值是模式串前缀和后缀最长公共前缀. 最后求得的结果符合书上的结果,如果是以-1开头的话就不需要再加1,如果是以 ...

  7. 数据结构- 串的模式匹配算法:BF和 KMP算法

      数据结构- 串的模式匹配算法:BF和 KMP算法  Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字 ...

  8. 数据结构与算法--KMP算法查找子字符串

    数据结构与算法--KMP算法查找子字符串 部分内容和图片来自这三篇文章: 这篇文章.这篇文章.还有这篇他们写得非常棒.结合他们的解释和自己的理解,完成了本文. 上一节介绍了暴力法查找子字符串,同时也发 ...

  9. 【数据结构】KMP算法

    我还是不太懂... 转2篇大神的解释    1>https://www.cnblogs.com/yjiyjige/p/3263858.html     2>https://blog.csd ...

随机推荐

  1. DJ_Java_Decompiler新手入门教程

    首先声明:这篇文章并不是我原创,只是感觉挺有用处,想跟大家分享一下,所以标注为原创,希望能有更多的朋友可以看到,还请原作者谅解. 昨天大D说让我写下DJ入门的基础,今天写了一大半了,结果不小心把浏览器 ...

  2. memwatch的使用

    博主的新Blog地址:http://www.brantchen.com 欢迎訪问:) linux下的測试工具真是少之又少,还不好用,近期试用了memwatch,感觉网上的介绍不太好,所以放在这里跟大家 ...

  3. GC日志分析

    JVM的GC日志的主要參数包含例如以下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的具体日志 -XX:+PrintGCTimeStamps 输出GC ...

  4. filter与servlet对照

    最近在开java物自,还记得刚开始使用servlet这是一个调试ajax什么时候,然后,我不知道怎么用,你知道写的路径来调用,总是提示404错,,到最后自己一点点的调通了,知道servlet是须要se ...

  5. VSTO学习笔记(九)浅谈Excel内容比较

    原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详 ...

  6. hdu3622(二分+two-sat)

    传送门:Bomb Game 题意:给n对炸弹可以放置的位置(每个位置为一个二维平面上的点),每次放置炸弹是时只能选择这一对中的其中一个点,每个炸弹爆炸的范围半径都一样,控制爆炸的半径使得所有的爆炸范围 ...

  7. WPF案例 (五) 对控件界面使用倒影

    原文:WPF案例 (五) 对控件界面使用倒影 在这个程序里对5个2D控件界面应用了垂直倒影,边缘模糊化和模型变换,在本例中,这5个2D控件为Border, 各包含了一幅Image,界面如下图所示,源码 ...

  8. DIV+CSS 入门

    玩一小会儿前csdn什么时候,页面上的加qq而微博,我认为这是美好的.牛腩完成.运营商也开始了他真正的学习B/S之旅. 刚開始的时候,我不知道<div>是什么 也不清楚CSS用来干什么的, ...

  9. Cocos2d-x教程(28)-ttf 字体库的使用

    欢迎增加 Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/37650843 通常为 ...

  10. grails的controller和action那点事---远程调试groovy代码

    最近由于项目需要,用到了grails,这玩意确实好用,生产率高有类型python的速度与简洁.仅第一印象,用的还不深入,说的不对请轻拍. 遇到的几个问题: 1. groovy远程调试 玩Java的应该 ...