c语言,给定一个字符数组,此字符数组由非负整数组成的,最高位数字存放放在数组的首位,。数组中每个元素只存储一个数字,0不能开头。不能用atoi
时间: 2024-11-05 15:32:42 浏览: 21
c代码-10.键盘输入一个正整数s,从低位开始取出s中奇数位上的数作为高位,依次构成一个新数输出。例如,输入"54321",输出"135"。
5星 · 资源好评率100%
在 C 语言中,如果你需要处理一个非负整数数组,其中每个元素表示一位数字,并且最高位数字存放在数组的第一个位置,但是又不允许使用标准库函数如 `atoi` 或 `strtol` 来转换字符串,你可以手动遍历数组并逐位解析。
以下是一个简单的示例,展示如何通过循环和移位操作将这样的数组转换成整数:
```c
#include <stdio.h>
#include <limits.h>
int parseInt(char arr[], int len) {
long long result = 0; // 使用长整型防止溢出
for (int i = 0; i < len; ++i) {
if (arr[i] == '0') { // 0开头不是有效的数字
return -1; // 返回错误标志
}
result = result * 10 + arr[len - 1 - i] - '0'; // 从低位到高位加权相加
}
return result;
}
int main() {
char numArray[] = {'3', '4', '5'};
int arrayLength = sizeof(numArray) / sizeof(numArray[0]);
int number = parseInt(numArray, arrayLength);
if (number != -1) {
printf("The integer represented by the array is: %lld\n", number);
} else {
printf("Invalid input: Array cannot start with '0'.\n");
}
return 0;
}
```
在这个例子中,`parseInt` 函数接收一个字符数组和其长度。它首先初始化结果为 0,然后从数组末尾开始遍历,每次乘以 10(相当于将当前进位加到下一位),并将当前字符对应的数字加到结果上。如果遇到 `'0'`,则返回 -1 表示无效输入。
阅读全文