自己实现一个atoi函数
时间: 2023-06-02 20:06:37 浏览: 115
好的,这是一个比较常见的面试题,atoi函数的作用是将一个字符串转换为整数。下面是一个简单的实现:
```
int atoi(const char* str) {
int result = 0;
int sign = 1;
int i = 0;
// 处理空格
while (str[i] == ' ') {
i++;
}
// 处理正负号
if (str[i] == '+' || str[i] == '-') {
sign = (str[i++] == '-') ? -1 : 1;
}
// 处理数字
while (str[i] >= '0' && str[i] <= '9') {
result = result * 10 + (str[i++] - '0');
}
return sign * result;
}
```
这个函数首先处理空格,然后判断正负号,最后处理数字并返回结果。需要注意的是,如果字符串中有非数字字符,这个实现则会直接返回。
相关问题
自己实现一个atoi函数,用于将字符串转换成整形
好的,下面是一个实现atoi函数的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
int atoi(string str) {
int res = 0;
int sign = 1;
int i = 0;
// 去除空格
while (str[i] == ' ') {
i++;
}
// 处理正负号
if (str[i] == '-' || str[i] == '+') {
sign = (str[i++] == '-') ? -1 : 1;
}
// 转换数字
while (i < str.length() && isdigit(str[i])) {
int digit = str[i] - '0';
if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
return (sign == 1) ? INT_MAX : INT_MIN;
}
res = res * 10 + digit;
i++;
}
return res * sign;
}
int main() {
string str = "-12345";
int num = atoi(str);
cout << num << endl;
return 0;
}
```
函数`atoi`接受一个字符串参数`str`,返回字符串表示的整数值。在函数中,我们使用了三个变量`res`、`sign`和`i`。变量`res`用于保存转换后的整数值,变量`sign`用于保存数字的正负号,变量`i`用于遍历字符串。
在函数中,我们首先去除字符串前面的空格。然后,我们处理正负号,如果字符串的第一个非空字符是负号,我们将`sign`设为-1,否则设为1。接着,我们遍历字符串中的数字字符,将其转换成相应的数字并累加到`res`中。如果`res`超出了整型范围,我们返回`INT_MAX`或`INT_MIN`,具体返回哪一个取决于数字的正负号。
在`main`函数中,我们调用`atoi`函数将一个字符串转换成整数,并打印结果,以便验证实现是否正确。
自己封装函数实现atoi函数
好的,我可以帮你封装一个函数来实现 `atoi` 函数的功能。`atoi` 函数可以将字符串转换为整型数,具体实现如下:
```c
#include <stdio.h>
int my_atoi(const char* str) {
int res = 0; // 存储结果
int sign = 1; // 符号位,默认为正数
// 跳过字符串前面的空格
while (*str == ' ') {
++str;
}
// 判断符号位
if (*str == '+' || *str == '-') {
sign = (*str++ == '+') ? 1 : -1;
}
// 转换数字字符为整型数
while (*str >= '0' && *str <= '9') {
res = res * 10 + (*str++ - '0');
}
return sign * res;
}
int main() {
char str1[] = "1234";
char str2[] = "-5678";
char str3[] = " 90 ";
char str4[] = "hello";
printf("%d\n", my_atoi(str1)); // 输出: 1234
printf("%d\n", my_atoi(str2)); // 输出: -5678
printf("%d\n", my_atoi(str3)); // 输出: 90
printf("%d\n", my_atoi(str4)); // 输出: 0
return 0;
}
```
在这个实现中,我们首先跳过字符串前面的空格,然后判断符号位,最后将数字字符转换为整型数。如果输入的字符串不是数字字符串,则返回0。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)