数据结构-串-test.ming



主题: 4、串    设置标记    

作者: 匿名
张贴日期: 2016年8月31日 星期三 上午11时15分23秒 CST
最后修改日期: 2016年8月31日 星期三 上午11时15分23秒 CST
查看总数: 11  您的查看次数: 1
 
 
 

 
翻译程序
 小明初学C++,已明白了四则运算、关系运算、逻辑运算、赋值运算、输入输出、简单选择和循环结构的用法,但他的英语不太好,记不住太多的保留字,于是他利用汉语拼音做保留字,山寨C++,发明了一种表达自己思想的算法描述规则。
 规则很简单:他将开始程序头部以一个拼音名字标记,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
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<  return 0;
}

要求:字符串操作需自己实现。

-----------------------------------------------------main.cpp----------------------------------------------

#include 
#include 
#include 
#include
#include "KMP.h"
using namespace std;


int main()
{
    ifstream input("test.ming");
    ofstream output("test.cpp");
    string sourceFile;///存放读取到的源文件
    while(getline(input,sourceFile))
    {
        bool fenhao = false;
        if(sourceFile[sourceFile.length()-1]==';')
            fenhao=true;
        bool go=false;
        for(int matchTime=0; matchTime<9; matchTime++) ///test.ming里面有9个关键字,每次匹配一个关键字,通过matchTime的值来判断匹配到的是哪个keyWords
        {
            int i;
            int x=KMPIndex(sourceFile,keyWords[matchTime]);///KMP算法进行串的匹配,失败返回-1,成功返回匹配到的首个下标
            if(x!=-1)///匹配成功,进入if语句
            {
                go=true;///go设置为true,用于这个for循环后面的分号是否输出判断
                if(matchTime==0)///匹配到  关键字  chengxu1 ,输出相应的翻译出的字符
                {
                    output<>";///输入是多个值的时候中间有逗号隔开,所以会在俩个值中间再加一个符号>>
                        else  if(sourceFile[i]==';')///最后符号为分号输出分号
                        {
                            fenhao=true;
                            break;
                        }
                        else output<



--------------------------------------------------KMP.h------------------------------------------------------

#ifndef KMP_H_INCLUDED
#define KMP_H_INCLUDED

#include
using namespace std;
string keyWords[9]=
{
    "chengxu1",//0
    "kaishi",//1
    "jieshu",//2
    "xunhuan",//3
    "shuru",//4
    "shuchu",//5
    "ruguo",//6
    "zhengxing",//7
    "shixing"//8
};
string printWords[9]=
{
    "#include \nusing namespace std;\nint main()",//0
    "{",//1
    "}",//2/
    "while(",//3
    "cin>>",//4
    "cout<<",//5
    "if(",//6
    "int",//7
    "float"//8
};
void GetNextval(string &line,int nextval[])
{
    int j=0,k=-1;
    nextval[0]=-1;
    while(j=line.length())
        return (i-line.length());//返回匹配模式串的首字符下标
    else return -1;//返回不匹配标志
}

void readFile(FILE *pf)
{
    FILE *pf2 = fopen("test.txt", "w");
    if(pf2 == NULL)
    {
        printf("file error!\n");
        fclose(pf);
        exit(0);
    }
    char ch;
    while(!feof(pf))
    {
        ch = fgetc(pf);
        putchar(ch);
        fputc(ch, pf2);
    }
    fclose(pf2);
    fclose(pf);
    cout<<"\n\nfile success!"<


你可能感兴趣的:(数据结构,c语言)