编写函数fun将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

编写函数fun将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。PTA
请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。字符串在主函数输入,转换后的整数在主函数输出。注意如果是非负数字符串,则输入无需带符号。

long fun ( char *p);
其中,p接受主函数传来的字符串的首地址。char *p同char p[ ]。
裁判测试程序样例:

#include "string.h"
long  fun ( char *p);
main()   
{ char s[10];
  long    n;
    gets(s);
  n = fun(s);
  printf("%ld\n",n);
}

/* 请在这里填写答案 */

输入样例:
-1234
输出样例:
-1234

输入样例:
1234
输出样例:
1234

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

img


#include "string.h"
#include<stdio.h>
long fun (char *p) {
    long res = 0;
    int i = 0;
    int sign = 1; // 记录数的正负性,默认为正数

    if (p[0] == '-') { // 如果第一个字符是负号
        sign = -1; // 将正负性标记为负数
        i++; // 从第二个字符开始读取数字
    }

    int len = strlen(p);
    for (; i < len; i++) { // 从第 i 个字符开始,遍历字符串
        if (p[i] >= '0' && p[i] <= '9') { // 如果该字符是数字
            res = res * 10 + (p[i] - '0'); // 将数字累加到 res 中
        } else {
            return 0; // 如果该字符不是数字,返回 0 表示转换失败
        }
    }

    return sign * res; 
}

int main() {
    char s[10];
    long n;
    gets(s); 
    n = fun(s); 
    printf("%ld\n", n); 
    return 0;
}