指针练习之学号转换

/*假设一个合法的学号由四位年级号、两位学院号与四位班级号、三位班内编号依次构成,一共13位数(本题中,一个合法的学号应仅包含数字),利用指针和数组实现一个函数fun()
原型:int fun(const char *p, int result[]);
功能:将以字符形式存放的自己学号转换成四个整数(依次表示:年级、学院、班级、学号),并存放于一个整数数组中。
参数说明:p为传入的学号字符串,以'\0'结束;result传入用于接收返回结果的整型数组首地址,规定其0号下标开始依次存放“年级、学院、班级、学号”。
返回值:如果通过p传入的是合法的学号,则本函数返回1;如果传入的学号非法,则本函数返回0.
例如:如果p中传入的学号为2012019050001,result的前四个元素应该依次为2012、1(01即为1)、9050和1(001即为1)
注意:
1. 在函数fun中,不要有任何输出(如调用printf或puts等函数),否则视为错误
2. 在编写完fun后,你可以编写main函数用于测试fun函数的功能
3. 只需上传fun函数及其依赖的头文件,不必上传用于测试的main函数
4. 在fun中,要考虑输入学号异常的情况*/
#include<stdio.h>
int main() {
	int fun(const char* p, int result[]);
	int n[4] = { 0 }, i;
	char a[15];
	char* p = a;
	gets(a);
	fun(p, n);
	for (i = 0;i < 4;i++)
		printf("%d ", n[i]);
	return 0;
}
#include<stdio.h>
int fun(const char* p, int result[4]) {
	if (*p < '0' || *p>'9' || p == NULL || result == NULL)
		return 0;
	else {
		int i, k;
		for (i = 0;i < 15;i++) {
			if (p[i] >= '0' && p[i] <= '9')
				k++;
		}
		if (k != 13)
			return 0;
		else if (k == 13) {
			result[0] = 1000 * (p[0] - '0') + 100 * (p[1] - '0') + 10 * (p[2] - '0') + p[3] - '0';
			result[1] = 10 * (p[4] - '0') + p[5] - '0';
			result[2] = 1000 * (p[6] - '0') + 100 * (p[7] - '0') + 10 * (p[8] - '0') + p[9] - '0';
			result[3] = 100 * (p[10] - '0') + 10 * (p[11] - '0') + p[12] - '0';
			return 1;
		}
	}
}

纯暴力那一段可以稍作修改....

注意判断学号超长时return 0;

之前一直错在这..........

别的没有甚莫大问题吧应该

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值