请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。 例如,若输入字符串"-1234",则函数把它转换为整数值-1234。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序:*/ #include <stdio.h> #include <string.h> long fun(char p[]) { /***************Begin************/ /*************** End ************/ } int main() { FILE *wf,*in; char s[10]; long n; printf("Enter a string:\n"); gets(s); n=fun(s); printf("%ld\n",n); /******************************/ in=fopen("in13.dat","r"); wf=fopen("out13.dat","w"); fscanf(in,"%s",s); fprintf (wf,"%ld",fun(s)); fclose(wf); fclose(in); /*****************************/ return 0; }
时间: 2023-07-05 09:35:44 浏览: 141
```
long fun(char p[]) {
int len = strlen(p);
long res = 0;
int sign = 1;
if (p[0] == '-') {
sign = -1;
}
for (int i = (p[0] == '-' || p[0] == '+') ? 1 : 0; i < len; i++) {
res = res * 10 + (p[i] - '0');
}
return sign * res;
}
```
解析:本题需要将一个数字字符串转换为整数。首先需要知道,每个数字字符对应的 ASCII 码值是相邻的,所以可以用字符减去 '0' 得到它对应的数字。其次,需要考虑字符串中可能包含负号,所以需要判断第一个字符是否为负号,如果是则将结果取负。最后,需要从字符串的第二个字符(如果存在的话)开始遍历,将每个字符转换为数字,并根据位数不断乘以 10 累加到结果中。
相关问题
请编写一个函数fun,它的功能是:将一个表示正整数的数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
以下是一个可能的实现,基本思路是将每个字符转换为对应的数字并累加,需要注意的是要处理字符串中可能存在的非数字字符:
```c
int fun(char* str) {
int res = 0;
while (*str != '\0') {
if (*str < '0' || *str > '9') {
return -1; // 非数字字符,返回错误码
}
res = res * 10 + (*str - '0');
str++;
}
return res;
}
```
使用时,可以将一个数字字符串作为参数传入该函数,例如:
```c
char num_str[] = "12345";
int num = fun(num_str);
printf("%d\n", num); // 输出 12345
```
需要注意的是,如果字符串中包含非数字字符,该函数会返回 -1,因此需要在使用时进行错误处理。
请编写函数fun,其功能是:将一个数字字符串转换为一个整数(不得调用C语言提供 的将字符串转换为整数的函数)。
可以使用以下的函数实现将数字字符串转换为整数的功能:
```c
int fun(char* str) {
int result = 0;
int sign = 1;
int i = 0;
if (str[0] == '-') {
sign = -1;
i = 1;
}
for (; str[i] != '\0'; i++) {
result = result * 10 + (str[i] - '0');
}
return sign * result;
}
```
该函数首先判断字符串的符号,如果是负数则将符号标记为-1,并从第二个字符开始遍历字符串。然后,将每个字符转换为数字并将其乘以10的幂次方加到结果中。最后,将结果乘以符号并返回。
阅读全文