/*假设一个合法的学号由四位年级号、两位学院号与四位班级号、三位班内编号依次构成,一共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;
之前一直错在这..........
别的没有甚莫大问题吧应该