系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。
喜欢的同学记得点赞、转发、收藏哦~
后续C语言经典100例将会以pdf和代码的形式发放到公众号
欢迎关注:计算广告生态 即时查收
1 题目
题目:将一个数字字符串转换为一个整数(不得调用C语言中提供的字符串函数进行操作)
例如:
输入:字符串 -1234
输出:整数 -1234
2 思路
思路:将字符串每个位置的字符进行对应的ASCII码转换
例如:字符 '0'-'9' 对应的十进制整数是48~57,那么,将对应的整数减去48就得到了对应的整数
二进制 | 十进制 | 十六进制 | 字符 |
---|---|---|---|
0011 0000 | 48 | 30 | 0 |
0011 0001 | 49 | 31 | 1 |
0011 0010 | 50 | 32 | 2 |
0011 0011 | 51 | 33 | 3 |
0011 0100 | 52 | 34 | 4 |
0011 0101 | 53 | 35 | 5 |
0011 0110 | 54 | 36 | 6 |
0011 0111 | 55 | 37 | 7 |
0011 1000 | 56 | 38 | 8 |
0011 1001 | 57 | 39 | 9 |
3 代码
#include<stdio.h>
#include<string.h>
/**
编写函数fun()
函数功能:将字符串转换为一个整数(但是不能使用C语言提供的字符串函数)
例如:
输入:字符串"-1234"
输出:整型 -1234
**/
long fun(char *p) {
int r = 0; //数字个数
long res = 0L; // 转化后的数字
int pos = 1; // 位数*10 *100 ...
int size = strlen(p); // 字符串长度
if (p[0] == '-'){
r = size - 1;
} else {
r = size;
}
// 从前往后转换的话,需要分情况去计算。即:不是负数的话从p[0] 和 如果是负数的话需要从p[1]开始
// 所以,可以从后往前计算,循环次数是 r
for (int i = 0; i < r; ++i) {
res += (p[size-1-i]-48)*pos;
pos *= 10;
}
return p[0]=='-'?-res:res;
}
int main(int argc, char const *argv[]) {
char s[6];
printf("Enter a string: ");
gets(s);
long res = fun(s);
printf("Convert Result: %ld\n", res);
return 0;
}
示例结果:
$ gcc ex1.c -o demo
$ ./demo
Enter a string: -1234
Convert Result: -1234
$ ./demo
Enter a string: 9089
Convert Result: 9089
-- END --
喜欢本文的同学记得点赞、转发、收藏~
更多内容,欢迎大家关注我们的公众号:**计算广告生态
后续C语言经典100例将会以pdf和代码的形式发放到公众号**
同时也带来更多系列文章以及干货!