1.题目:有一个字符串表示一个路径,该字符串由操作字符和坐标点构成。

需要设计和编写代码,去解析字符串,获取每一个节点的属性,可以将每一个操作符和对应的点的信息看成一个节点,存放在 node 类中(见参考)。一个 Path 类存放所有的节点,这些所有节点就组成一个路径。

打印输出路径的属性。

操作字符(不区分大小写):

  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • Q = quadratic Bézier curve
  • Z = closepath

//没必要了解具体操作字符的含义,只需要记录操作符,并且输出与之对应的单词

例子1:

字符串:M150 0 L75 200 L225 200 Z

上面的例子定义了一条路径,它开始于位置150 0,到达位置75 200,然后从那里开始到225 200,最后在150 0关闭路径。

输入:

“M150 0 L75 200 L225 200 Z”

输出:

moveto:(150, 0)

lineto:(75, 200)

lineto: (225, 200)


2.算法;

1.c++ 类的模式

2. 暴力算法


3.代码:

暴力代码:

#include<bits/stdc++.h>
using namespace std;
//暴力破解版
char M[] ="moveto : ";
char L[] ="lineto : ";
char H[] ="horizontal lineto : ";
char V[] ="vertical lineto : ";
char C[] ="curveto : ";
char Q[] ="quadratic Bezier curve : ";
char Z[] ="closepath : ";
//M 100 350 L 150 -300M 250 50 L 150 300M 175 200 L 150 0M 100 350 q 150 -300 300 0
int main()
{char a[10000];gets(a);int a1=strlen(a);//获取  字符串的长度  //cout<<a1;int i=0; //记录遍历的节点 while(i<a1){if(a[i]==' '){i++;continue;}if(a[i]=='M'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<M;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1  || a[i]=='.' ||a[i]=='-' )  //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1  || a[i]=='.' ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl; }else if(a[i]=='L'){i++;//下一个字符 if(a[i]==' '){i++;} cout<<L;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;} i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' )   //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl; }else if(a[i]=='H'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<H;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1  || a[i]=='.'||a[i]=='-' ) //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1  || a[i]=='.'  ||a[i]=='-' )   //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl;    }else if(a[i]=='V'){i++;//下一个字符 if(a[i]==' '){i++;} cout<<V;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'  ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'  ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl; }else if(a[i]=='C'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<C;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.' ||a[i]=='-' ) //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57  &&i<a1 || a[i]=='.'  ||a[i]=='-' )   //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl;    }else if(a[i]=='Q' ||  a[i]=='q'){i++;//下一个字符 if(a[i]==' '){i++;}cout<<Q;cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'  ||a[i]=='-' )   //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'  ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"; cout<<" , ";i++;//跨过中间的空格  cout<<"("; while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'  ||a[i]=='-' )    //保证数字的提取 {cout<<a[i];    i++;  } i++;//跨过中间的空格  cout<<",";while(48<=a[i]&& a[i]<=57 &&i<a1 || a[i]=='.'   ||a[i]=='-' )   //保证数字的提取 {cout<<a[i];    i++;  } cout<<")"<<endl;    }else if(a[i]=='Z'){return 0; }}return 0;
} 

C++ 类的模板代码:

#include<bits/stdc++.h>
using namespace std;
char M[] ="moveto";
char L[] ="lineto";
char H[] ="horizontal lineto";
char V[] ="vertical lineto";
char C[] ="curveto";
char Q[] ="quadratic Bezier curve";
char Z[] ="closepath";enum class OperateType //枚举类
{M=1,L,H,V,C,Q,Z
};OperateType return_type(char  c)
{if(c=='M'|| c=='m'){return static_cast<OperateType>(1);}if(c=='L'|| c=='l'){return static_cast<OperateType>(2);}if(c=='H'|| c=='h'){return static_cast<OperateType>(3);}if(c=='V'|| c=='v'){return static_cast<OperateType>(4);}if(c=='C'|| c=='c'){return static_cast<OperateType>(5);}if(c=='Q'|| c=='q'){return static_cast<OperateType>(6);}
}//一个点的类
class Point{
public:Point();//类内 定义  类外实现                    无参构造Point(float a1,float a2,OperateType type);//类内 定义  类外实现    有参构造       //拷贝构造不需要  , void set_x(float a);//类内 定义  类外实现    给 x 赋值 void set_y(float a);//类内 定义  类外实现    给 y  赋值void set_x1(float a);//类内 定义  类外实现    给 x1 赋值 void set_y1(float a);//类内 定义  类外实现    给 y1  赋值void set_type(OperateType a);//类内 定义  类外实现    给 type  赋值 float get_x();//类内 定义  类外实现         获取 x 的值 float get_y();//类内 定义  类外实现         获取 y 的值  float get_x1();//类内 定义  类外实现         获取 x 的值 float get_y1();//类内 定义  类外实现         获取 y 的值 OperateType get_type();//类内 定义  类外实现         获取 type 的值  void print();//节点打印函数  private:  //私有成员 float x,y;//两个坐标  float x1=0;//备用  Q float y1=0;//备用  Q  OperateType type;
};Point::Point()// 无参构造
{this->x=0;this->y=0;
}
Point::Point(float a1,float a2,OperateType aa)//有参构造
{this->x=a1;this->y=a2; this->type=aa;
}
void Point::set_x(float a)//给 x 赋值
{this->x=a;
}
void Point::set_y(float a)//  给 y  赋值
{this->y=a;
}
void Point::set_type(OperateType a)//类内 定义  类外实现    给 type  赋值
{this->type=a;
}
void Point::set_x1(float a)//类内 定义  类外实现    给 x1 赋值
{this->x1=a;
}
void Point::set_y1(float a)//类内 定义  类外实现    给 y1  赋值
{this->y1=a;
}
float Point::get_x()//    获取 x 的值
{return this->x;
}
float Point::get_y()//   获取 y 的值
{return this->y;
}
float Point::get_x1()//    获取 x1 的值
{return this->x1;
}
float Point::get_y1()//   获取 y1 的值
{return this->y1;
}
OperateType Point::get_type()//类内 定义  类外实现         获取 type 的值
{return this->type;
}
void Point::print()//节点打印函数
{if(type==static_cast<OperateType>(1))//输出 type == M  的字符串 {cout<<M;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl; }else if(type==static_cast<OperateType>(2)){cout<<L;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl;   }else if(type==static_cast<OperateType>(3)){cout<<H;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl;   }else if(type==static_cast<OperateType>(4)){cout<<V;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl;   }else if(type==static_cast<OperateType>(5)){cout<<C;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<endl;   }else if(type==static_cast<OperateType>(6)){cout<<Q;cout<<" : " << "(" <<(this->get_x()) << "," << (this->get_y()) <<")"<<" , "<<"(" <<(this->get_x1()) << "," << (this->get_y1())<< ")"<<endl;     }else if(type==static_cast<OperateType>(7)){}} class Path{
public:Path();//无参构造  Path(vector<Point>a);//有参构造 void print1();//打印函数  void add_nodes(Point a);//添加节点
private:vector<Point>nodes;
};
Path::Path()//无参构造
{}
Path::Path(vector<Point>a)//有参构造
{this->nodes=a;
}
void Path::print1()//打印函数
{vector<Point>::iterator it;for(it=nodes.begin();it!=nodes.end(); it++)//it++ 遍历下一个{it->print();}
}
void Path::add_nodes(Point a)//在动态数组里面 添加元素  添加到最后面
{nodes.push_back(a);
}//字符串读取 数字函数
float  get_number(char * W,const int n)//W  字符串数组  , n 位置
{int gg=n;//记录位置 int hh=1;//小数的位置 int num= strlen(W); //获取字符串的长度 防止内存泄露int fuhao=0; // 判断 数字的正负  0  正数   1 负数float sum=0; //返回的数字  int sum1=0; //数字整数部分float sum2=0;//数值 小数部分 if(W[gg]=='-'){fuhao=1;//负数gg++;    }while(48<=W[gg]&&W[gg]<=57 || W[gg]=='.'){if(W[gg]=='.')//有小数   进入小数模式 {while(48<=W[gg]&&W[gg]<=57){float a= W[gg++]-48;for(int j=1;j<=hh;j++){a=a*0.1; }hh++;sum2=sum2+a; }sum=sum1+sum2;if(fuhao==1){sum=sum*(-1);}return sum;}else{sum1=sum1*10+ W[gg]-48;gg++;}}if(fuhao==1){sum1=(-1)*sum1;    }   return sum1;
} void add_node(char * W,Path &a)//节点添加函数
{int i=0;int n=strlen(W);//cout<<"字符串长度:"<<n<<endl;i=0;//遍历的节点数值  while(i<n){if(W[i]>65)//有字符 { char kkkk=W[i]; if(W[i]=='Q' || W[i]=='q'){i++;//下一位 if(W[i]==' ')//假如有空格 ,跳过 {i++;}float f1=get_number(W,i);//获取第1个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f2=get_number(W,i);//获取第2个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f3=get_number(W,i);//获取第 3个数i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f4=get_number(W,i);//获取第 4个数i++; Point * aaa= new Point(f1,f2,return_type(kkkk));aaa->set_x1(f3);aaa->set_y1(f4);a.add_nodes(*aaa);        }else if(W[i]=='Z'  || W[i]=='z'){i++;}else{i++;//下一位 if(W[i]==' ')//假如有空格 ,跳过 {i++;}float f1=get_number(W,i);//获取第1个数字 i++;while(W[i]!=' ')//找到空格 {i++; }i++;//下一个数字float f2=get_number(W,i);//获取第2个数字 Point * aaa= new Point(f1,f2,return_type(kkkk));a.add_nodes(*aaa);}        }else//跳过 {i++;continue; }    }
}//M150 0 L75 200 L255 200 Z
int main()
{char W[10000];gets(W);Path a;add_node(W,a);a.print1();} 

第三次的面试的 笔试题目相关推荐

  1. C/C++面试、笔试题目(二)

    4.    static有什么用途?(请至少说明两种) 1,在函数中定义的STATIC变量在函数重复调用时维持其值不变,不在执行此变量的初始化代码. 2可以定义一个作用郁为当前文件的变量. 2, 7. ...

  2. linux常用shell命令面试,shell经典笔试题目总结

    shell经典笔试题目总结 守望者整理了一些高手的博客记录的shell面试题分享给大家,有些比较有意思,帮助大家面试或则学习shell编程的学习例子 一 文件内容如下: 100 a         1 ...

  3. android长虹面试题,长虹电子面试笔试题目

    [长虹电子面试笔试题目] 1.你平时休闲经常去的地方 A.郊外2分 B.电影院 3分 C.公园5分 D.商场10分 E.酒吧15分 F.练歌房20分 2.你更喜欢吃那种水果? A. 草莓2分 B.苹果 ...

  4. C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)

    笔试主要考察应聘者掌握基础知识的扎实程度,以及解决问题的思考方式.笔试是程序员应聘过程中最关键的.也是难度最大的一个环节.在激烈的求职竞争中,想顺利漂亮地完成笔试题目.躲过面试官布下的种种" ...

  5. 程序员面试笔试宝典学习记录(一)(常见面试笔试题目)

    摘选著名的互联网企业的面试笔试真题: 1.extern的作用 自己理解:应该需要区分extern在C语言中和C++语言中的作用,C语言中extern声明的函数和变量可以被该文件外部模块引用,C++语言 ...

  6. 优酷土豆java面试_优酷土豆校园招聘Java开发类笔试题目

    先总体说下题型,共有20道选择题,4道简答题,3道编程题和1道扩展题,题目都比较简单,限时一小时完成, 一.选择题 选择题非常简单,都是基础题,什么死锁发生的条件.HashMap和HashSet查找插 ...

  7. linux高级运维笔试简答题及答案,企业linux初级和高级运维面试常问题目问答总结技巧讲解(2020年录制)...

    课程增值: 课程是我最近面试辅导的所有学员,成功找到工作,企业常问题目,我带领大家学习,面试如何问答. 我曾经经历面试linux运维没有做大量准备,经历大量hr给我说的一句话就是 回家等通知吧,心碎了 ...

  8. php简单选择题,PHP面试笔试题目选择题

    导读:PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.以下是由小编J.L为您整理推荐的笔试题目和笔试经验,欢迎参考阅读. 1.以 ...

  9. tcl c语言笔试题,TCL技术类笔试题目.doc

    TCL技术类笔试题目 模拟电路试题 一.二极管 1.如图所示电路中,已知电源电压 E=4V 时,I=1mA.那么当电源电压 E=8V 时 , 电流I的大小将是______ 2.稳压管通常工作于____ ...

最新文章

  1. 疫情之危,和两类无人车落地之机 | 创新工场“疫情后”系列分享
  2. C++ int转string的几种方法比较
  3. 微型计算机突然断电什么信息全部都是,微型计算机的硬件组成阶段作业(函授2014春).doc...
  4. 【项目管理】风险分析
  5. Design pattern
  6. 解题:ZJOI 2006 书架
  7. docker 打包新镜像原有配置丢失_Docker简介与安装
  8. MFC中给对话框重绘边框
  9. go语言项目实战1:-正则表达式,文件读取的综合使用
  10. 使用jQuery实现网页技术(无数据库)
  11. sql server添加列
  12. ikm java_ikm(IKM在线)
  13. php pager,fleaphp常用方法分页之Pager使用方法
  14. 企业资源计划——ERP
  15. 浅析HashMap底层原理
  16. Unicode(全世界每个国家字符的唯一编码0x000000 到 0x10FFFF)与UTF-8的区别
  17. fprintf函数matlab,fprintf函数的运用(组图)
  18. 台式电脑计算机里的共享网络,如何实现笔记本和台式机两台电脑共享上网
  19. 一文教你用 Neo4j 快速构建明星关系图谱
  20. js代码格式化(js代码格式化html标签)

热门文章

  1. python装在固态还是机械_手把手教你使用SSD(新手必看)
  2. 万能js时间日期格式转换
  3. qt5 textedit怎么改变鼠标响应_聊聊鼠标的前世今生
  4. html css fontfamily,CSS font-family 属性
  5. 基础研究与国家目标——国家重点基础研究发展计划[转自科学社]
  6. 光伏并网pscad_不对称故障下两级式光伏逆变器的LVRT策略
  7. EXP-00091 Exporting questionable statistics.
  8. [从零开始]用python制作识图翻译器·一
  9. [HIMCM暑期班]第3课:一个博弈问题
  10. 高三学生凭神经网络论文研究网络暴力!00后也要出道了?