北航计算机机试16字符串的解析
来源:互联网 发布:检测 android ios js 编辑:程序博客网 时间:2024/06/05 10:04
题目描述
给一个c语言的enum定义语句,输出enum中规定的各项值。
输入
输入一个c语言的enum定义语句。
输出
输出enum中规定的各项值。
样例输入
enum BOOL{true,false};
样例输出
true 0
false 1
先上代码
//如何输入string和char该如何选择是string字符串还是char数组//如何对赋值后的字符串转为数字//如何记录当然所指字符串所在的顺序号//define the type of enum is the increase of number from 0 #define N 100//编译在stdlib之前#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>int match(char s[],int j,int n);int my_atoi(char* pstr) ;int main(){ char str[N]; int i=0,n=0;//默认数值 int temp=0; fgets(str,sizeof(str),stdin); int length=strlen(str); char *strcp=new char[length]; while(str[i]!='{') { i++; } int k=i+1;//起始大括号内位置 for(k;k<length-2; ) { int j=0; while(str[k]!=',') { if(str[k]=='}') { break; } strcp[j]=str[k]; j++; k++; } n=match(strcp,j,n); n+=1; k+=1; } return 0;}int my_atoi(char* pstr) { int Ret_Integer = 0; int Integer_sign = 1; /* * 判断指针是否为空 */ if(pstr == NULL) { printf("Pointer is NULL\n"); return 0; } /* * 把数字字符串逐个转换成整数,并把最后转换好的整数赋给Ret_Integer */ while(*pstr >= '0' && *pstr <= '9') { Ret_Integer = Ret_Integer * 10 + *pstr - '0'; pstr++; } Ret_Integer = Integer_sign * Ret_Integer; return Ret_Integer; } int match(char s[],int j,int n){ int flag=0; int result=n; int m,k; for(int i=0;i<j;i++) { if(s[i]=='=') { char *num=new char[j-i]; for(m=i+1,k=0;m<j;m++,k++) { num[k]=s[m]; } result=my_atoi(num); flag=1; printf(" %d\n",result); return result; } else{ printf("%c",s[i]); } } if(flag==0) { printf(" %d\n",result); } return result;}
从几个方面来说吧,一开始没读懂题目,也是醉
1.enum定义
enum 即枚举,当某些量仅由有限个数据值来组成时,通常用枚举类型。枚举类型描述的是一组整型值 的集合。
类似:enum response{no,yes,none};
其中no,yes,none都成为枚举常量,即不可对其赋值!!
除非特别指定,一般第一个枚举常量的值为0,然后依次递增1,同时若明确定义枚举常量的值,那么这个的下一个枚举常量如果没有被指定值,则默认为前者递增1(说的我都绕湖涂了- -)所以思路 就是,首先找到变量的标志开始符’{‘,然后以逗号为分隔点,处理每一小段,如果赋值就用atoi来转换成要赋的值,如果默认就按照所在位置自动赋值。
2.string字符串和char数组的输入输出,常用操作函数
在c中没有提供字符串数据类型(在c++中可以直接使用string类型),因此需要用char数组来储存string字符串,只有当最后一个字符是’\0’才标志为字符串。
字符串赋值:要么在定义数组时直接初始化 char str[10]=”hello”;要么使用字符串处理函数strcpy(str,”Hello”);
字符串输入:
1.按%c一个字符一个字符的输入,for(i=0;str[i]!=’\0’;i++) printf(“%c”,str[i]);
2.按%s作为一个整体的字符串输入,但有坏处 scanf会在遇到空白字符(空格,回车符或者制表符)停止,所以没办法输入带空格的句子,弃之;
3.gets()用于从键盘输入一个字符串(包括空格符),但不能限制输入字符串的长度,极其容易引起缓冲区溢出,scanf也有这个问题。4. fget(name,sizeof(name),stdin);
限制输入字符串长度不超过数组大小。字符串输出:
同字符串输入对应,gets对应puts,用于从括号内的参数开始的地址依次输出存储单元中的字符,遇到第一个’\0’停止
当然也可以%s 或者%c输出常用操作函数
求字符串长度 strlen(str);// 返回字符串str的实际长度,不包括’\0’
字符串赋值 strcpy(str1,str2);// str2复制到str1,注意不要越界
strcmp(str1,str2);//比较
strcat (str1,str2);//连接
3.字符串与单个字符的赋值问题
- 字符串对单个字符赋值操作可以使用赋值运算符=,但赋值运算符不能用于字符串的赋值操作,字符串只能使用strcpy
4.ctype头文件
字符处理函数库,都是对int型进行操作
5.atoi转换函数
必须包含头文件stdlib将数字字符串转换为整型或浮点型的数值,但我用的时候不能转换,就写了一个简单的转换函数,没有排除边界情况。
6.创建动态的数组,关于new,malloc,calloc
首先我不知道c中能不能用new,反正我是编译出来了…new完记得delete
说说malloc和ralloc
在创建动态数组的时候很有用,但要注意你创建出来的是一个指针,指向你创建的空间的首地址,还有就是用完要free
- malloc 用于分配若干字节的内存空间,返回指向该内存首地址的指针。
申请动态一维数组:
int *p=NULL;p=(int *)malloc(n *sizeof(int));if(p==NULL) exit(1);free(p);
- calloc用于给若干同一类型的数据项分配连续的存储空间,每个数据项的长度单位为字节,系统对calloc分配的存储空间自动初始化为0,可用于申请二维数组
int *p=NULL;p=(int *)calloc( m * n,sizeof(int));if(p=NULL) exit(1);free(p);//寻址时,必须当作一维数组来寻址,p是指向这个二维动态数组的列指针scanf("%d",&p[i*n+j]);// *(p+i *n+j)
- 北航计算机机试16字符串的解析
- 北航计算机机试09字符串的查找删除
- 北航计算机机试11字符串扩展
- 北航计算机机试07字符串统计
- 北航计算机机试08字符串匹配
- 北航计算机机试16逆序数
- 北航计算机机试07排序10归并字符串
- 北航计算机机试17
- 北航计算机机试14阶乘数
- 北航计算机机试13真分数约分
- 北航计算机机试14五子棋
- 北航计算机机试14排版
- 北航计算机机试11替换矩阵
- 北航计算机机试08旋转矩阵
- 北航计算机机试11孪生数
- 北航计算机机试08素数
- 北航计算机机试15相亲数
- 北航计算机机试06成绩排序
- 科锐课堂笔记:2017/3/14 指针
- 各大网站JQuery的CDN库
- js中的apply方法和call方法区别
- goChat项目总结
- hibernate service
- 北航计算机机试16字符串的解析
- andriod学习——启动第二个activity
- CodeForces 143DHelp General
- UVA
- 笔记11
- MySQL主从同步初探
- POJ2761-Treap
- jQuery中的text()、html()和val()
- ajax 异步的javascript和xml