数字字符串转换成这个字符串对应的数字(十进制、十六进制)

(1)数字字符串转换成这个字符串对应的数字(十进制)

要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。

提示:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加。

思路:字符指针减去’0’(对应ASCII值为48),即将其对应的ASCII码值转换为整型。第一次循环*str指向的是字符’1’,其对应的ASCII码值为49,而’0’对应ASCII码值为48,所以运用”*str-‘0’“目的是将字符’1’转换成数字1,后面以此类推。

代码如下:

#include <stdio.h>
#include <assert.h>
int my_atoi(char *str)
{
int n = ;
int flag = ;
assert(str);
if(*str == '-')
{
flag = ;
str++;
}
while(*str >= '' && *str <= '')
{
n = n* + (*str - '');
str++;
}
if(flag == )
{
n = -n;
}
return n;
}
int main ()
{
char a[] = "";
char b[] = "-123";
printf("%d\n%d\n",my_atoi(a),my_atoi(b));
return ;
}

(2)数字字符串转换成这个字符串对应的数字(十六进制)

要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。

提示:你每发现一个数字,把当前值乘以16,并把这个值和新的数字所代表的值相加。

思路:字符指针减去’0’(对应ASCII值为48),即将其对应的ASCII码值转换为整型。第一次循环*str指向的是字符’1’,其对应的ASCII码值为49,而’0’对应ASCII码值为48,所以运用”*str-‘0’“目的是将字符’1’转换成数字1,后面以此类推。

代码如下:

#include <stdio.h>
#include <assert.h>
#include <iostream> using namespace std; int change(char* str)
{
assert(str);
int result = ;
int flag = ; if (*str == '-')
{
flag = ;
str++;
} while (*str)
{
if (*str >= '' && *str <= '')
result = result * + (*str - '');
else if (*str >= 'a' && *str <= 'f')
result = result * + (*str - 'a' + );
else if (*str >= 'A' && *str <= 'F')
result = result * + (*str - 'A' + );
else {
cout << "非法字符!" << endl;
return ;
}
str++;
} if (flag == ) result = -result; return result;
} int main()
{
char str[] = "-16";
int res = change(str);
cout << res << endl; return ;
}

最新文章

  1. 【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件
  2. IOS开发之画图形
  3. 【HTML】Beginner8:Table
  4. 基于visual Studio2013解决面试题之0304镜像二叉树
  5. MVC模式编程演示样本-登录认证(静态)
  6. Python3之利用Cookie模拟登录
  7. 51 nod 1212 无向图最小生成树(Kruckal算法/Prime算法图解)
  8. Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext
  9. Android Studio在华为真机上运行无法输出Debug日志解决
  10. js my_first
  11. OpenGL中摄像机矩阵的计算原理
  12. HTTPS证书撤销
  13. LuoguP1126 机器人搬重物(BFS)
  14. 关于android4.3 bluetooth4.0的那些事儿
  15. [Android] 配置安卓模拟器,使得dex文件不被优化成odex
  16. 解决序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环引用。
  17. wpf附加属性理解
  18. vue 生命周期小结
  19. Windows自动化---模拟鼠标键盘
  20. 性能测试工具Jmeter08-Jmeter断言(检查点)

热门文章

  1. Java内部类(2):普通的成员内部类
  2. Python C/S架构,网络通信相关名词,socket编程
  3. vue父组件如何向子组件中传递数据?
  4. 欢迎关注微信公众号codefans一起交流技术
  5. list-style-type:none是加在ul还是li中呢?
  6. 2019牛客暑期多校训练营(第七场)-H Pair(数位dp)
  7. redis db0-15 的概念
  8. SQL Pretty Printer for SSMS 很棒的格式化插件
  9. PAT A1065 A+B and C (64bit) (20 分)
  10. SSD性能测试