自己实现一个atoi函数,用于将字符串转换成整形
时间: 2024-03-25 21:38:28 浏览: 50
好的,我来为您编写一个atoi函数的实现。
```c
int myAtoi(char* str) {
int sign = 1, num = 0, i = 0;
while (str[i] == ' ') {
i++;
}
if (str[i] == '+' || str[i] == '-') {
sign = (str[i++] == '+') ? 1 : -1;
}
while (str[i] >= '0' && str[i] <= '9') {
if (num > INT_MAX / 10 || (num == INT_MAX / 10 && str[i] - '0' > 7)) {
return (sign == 1) ? INT_MAX : INT_MIN;
}
num = num * 10 + (str[i++] - '0');
}
return sign * num;
}
```
这个函数的实现比较简单,首先跳过字符串开头的空格字符,然后判断符号位,如果有符号位则记录下来,接着遍历字符串中的数字字符,将其转换成数字并乘以10的n次方累加,直到遇到非数字字符为止。在累加数字的过程中需要判断是否会溢出,如果溢出则返回INT_MAX或INT_MIN。最后返回数字乘以符号位。
相关问题
c++如何把字符串转换为整形
在 C++ 中,将字符串转换成整数通常可以使用标准库提供的 `std::stoi` 或 `std::atoi` 函数。这两个函数分别是用于将字符串解析为 `int` 和无符号 `int` 的类型。以下是使用 `std::stoi` 的例子:
```cpp
#include <string>
#include <iostream>
int main() {
std::string str_num = "123";
int num = std::stoi(str_num);
std::cout << "字符串 " << str_num << " 转换为整数是: " << num << std::endl;
return 0;
}
```
如果你不确定输入字符串是否能被成功转换为整数,可以先捕获异常:
```cpp
try {
int num = std::stoi("123abc");
} catch (const std::invalid_argument& e) {
std::cerr << "无法转换: " << e.what() << '\n';
}
```
C语言将字符串转化成整形
可以使用C语言标准库中的`atoi`函数将字符串转换为整数。例如:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "123";
int num = atoi(str);
printf("%d\n", num);
return 0;
}
```
输出结果为:
```
123
```
阅读全文