C语言-数字字符串转换成这个字符串对应的数字(十进制、十六进制)
2024-10-19 14:54:38
数字字符串转换成这个字符串对应的数字(十进制、十六进制)
(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 ;
}
最新文章
- 【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件
- IOS开发之画图形
- 【HTML】Beginner8:Table
- 基于visual Studio2013解决面试题之0304镜像二叉树
- MVC模式编程演示样本-登录认证(静态)
- Python3之利用Cookie模拟登录
- 51 nod 1212 无向图最小生成树(Kruckal算法/Prime算法图解)
- Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext
- Android Studio在华为真机上运行无法输出Debug日志解决
- js my_first
- OpenGL中摄像机矩阵的计算原理
- HTTPS证书撤销
- LuoguP1126 机器人搬重物(BFS)
- 关于android4.3 bluetooth4.0的那些事儿
- [Android] 配置安卓模拟器,使得dex文件不被优化成odex
- 解决序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环引用。
- wpf附加属性理解
- vue 生命周期小结
- Windows自动化---模拟鼠标键盘
- 性能测试工具Jmeter08-Jmeter断言(检查点)
热门文章
- Java内部类(2):普通的成员内部类
- Python C/S架构,网络通信相关名词,socket编程
- vue父组件如何向子组件中传递数据?
- 欢迎关注微信公众号codefans一起交流技术
- list-style-type:none是加在ul还是li中呢?
- 2019牛客暑期多校训练营(第七场)-H Pair(数位dp)
- redis db0-15 的概念
- SQL Pretty Printer for SSMS 很棒的格式化插件
- PAT A1065 A+B and C (64bit) (20 分)
- SSD性能测试