实现将一个字符串转化成对应的整形数字

本文介绍了一个atoi函数的具体实现,该函数能够将输入的字符串转换为对应的整数,并考虑了溢出的情况以及如何区分输入0和空字符串。

输入一个字符串比如“+1234”,将其转换成对应的数字1234输出,若是“-1234”,则输出-1234:

#include <stdio.h>enum Charec{TRUE,FALSE};int check = FALSE;int my_atoi(const char *str){ int num = 0; if((str != NULL)&&(*str != '\0')) {  int minus = 0;  if(*str == '+')   str++;  else if(*str == '-')  {   str++;   minus = 1;  }  while(*str != '\0')  {   if((*str >= '0')&&(*str <= '9'))   {    int flag = minus?-1:1;    num = (num*10)+flag*(*str-'0');    if((!minus&&(num>0x7FFFFFFF))||(minus&&((signed int)num<0x80000000)))    {     num = 0;     break;    }    str++;   }   else   {    num = 0;    break;   }  }  if(*str == '\0')  {   check = TRUE;  } } return num;}int main(){ char str[50]; int ret = 0; scanf("%s",str); ret = my_atoi(str); printf("%d\n",ret); return 0;}

为将输入字符串“0”输出结果0和输入空字符串输出结果也同样为0这两种情况区分开,特意设置了一个全局枚举常量,这样可以检查枚举常量的值来区分,而且须考虑输入的字符串转换成对应的数字超出int的范围的情况。

本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1707218

### 将整型数字转换为字符形式的方法 在编程中,将整型数字转换为其对应的字符表示有多种实现方式。以下是几种常见的方法及其适用场景: #### 方法一:利用 `(char)(digit + '0')` 转换 这种方式基于 ASCII 编码表的特性,其中 `'0'` 到 `'9'` 的字符编码是连续的。因此可以通过简单的加法运算将整型数字映射到其对应的字符。 ```c // 示例代码 int digit = 5; char ch = (char)(digit + '0'); printf("%d 对应的字符是 %c\n", digit, ch); ``` 这种方法简单高效,适用于单个数字字符的转换[^1]。 --- #### 方法二:使用 `String.valueOf()` 或 `Integer.toString()` 对于 Java 开发者来说,可以借助内置函数完成这一操作。这些函数会自动处理整型数据并返回其字符串形式,之后可以根据需求提取单个字符。 ```java // 示例代码 int num = 23456; String strNum = String.valueOf(num); // 或 Integer.toString(num) System.out.println("整型数字 " + num + " 转换后的字符串为:" + strNum); // 如果只需要某个特定位置上的字符 char firstChar = strNum.charAt(0); System.out.println("第一个字符为:" + firstChar); ``` 此方法适合于需要批量处理多位数的情况,并且能够轻松访问任意一位数字对应的字符[^4]。 --- #### 方法三:逐位拆分并通过 `(char)` 类型强制转换 当目标是从一个多字节整数中逐一取出每一位作为独立字符时,可采用如下逻辑: 1. 使用模运算 `% 10` 获取当前最低有效位; 2. 应用 `(char)(digit + '0')` 进行转换; 3. 更新原数值以便继续处理下一位(即执行 `/= 10` 操作)。 ```c #include <stdio.h> void convertIntToChars(int num) { if (num == 0) { printf("0"); return; } char result[50]; int index = 0; while (num > 0) { int digit = num % 10; result[index++] = (char)(digit + '0'); num /= 10; } for (int i = index - 1; i >= 0; --i) { putchar(result[i]); } } int main() { int number = 789; printf("整型数字 %d 转换后的字符序列为 ", number); convertIntToChars(number); return 0; } ``` 该方案特别适配那些不依赖高级库或者追求性能优化的应用场合[^3]。 --- #### 总结 以上三种途径各有千秋,在实际开发过程中可根据具体业务需求选取最合适的策略实施转化工作。无论是单一字符还是整个序列都需要考虑边界条件以及异常情况下的行为表现以确保程序健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值