算法思想:
1. 字符串转无符号整型unsignedint
初始化一个字符串str;num用于存放当前转换的整型数,初始化为0。对字符串str中的每个字符进行判断,一旦扫描到当前字符在数字字符的范围之外,直接跳出循环。那么转换的整型数是由从串首开始,一直到不为数字字符或为结束符为止形成的一段纯数字字符。若在数字字符的范围之内,当前num为上一次转换的num乘10,再加上当前字符与字符‘0’的ASCII值的差值。其实当前字符转换成的整型数值就是当前字符的ASCII值减去‘0’的ASCII值。每一次把对应的字符转换后,字符指针str就向后偏移一个字符位置。因为是字符串转换成整型数,得到的是一个整型数值,那么该函数为返回值的int类型。

函数实现代码如下:

int unsignedstrtoint(char *str)      //开头不带正负号的字符串转整型
{int num = 0;if (NULL == *str)   //字符串为空return 0;else {while (str){if (*str<'0' || *str>'9')       //只要当前字符不在数字字符的范围内,直接跳出循环break;elsenum = num * 10 + (*str - '0');        //括号里面的是二者字符对应ASCII值的差值,即为当前位置的字符对应的整型值str++;}}return num;
}

2. 字符串转有符号整型int
该函数的思路和字符串转无符号整型unsignedint主体相同,不同的是需要判断字符串串首是‘+’,还是数字字符,还是‘-’。前两种表示正数形式,后一种为负数形式。如果串首是‘+’或‘-’,那么字符指针就向后移1个字符位置,然后做相应处理,否则直接做相应处理。最后如果串首为‘-’,那么函数返回num的相反数。因为还是字符串转换成整型数,得到的是一个整型数值,那么该函数为返回值的int类型。

函数实现代码如下:

int strtoint(char *str)      //开头不带正负号的字符串转整型
{int num = 0;short flag;       //用于标记转换后整型的符号if (NULL == *str)   //字符串为空return 0;else if ('-' == *str){flag = 1;str++;}else if ('+' == *str){flag = 0;str++;}elseflag = 0;while (str){if (*str<'0' || *str>'9')        //只要当前字符不在数字字符的范围内,直接跳出循环break;elsenum = num * 10 + (*str - '0');        //括号里面的是二者字符对应ASCII值的差值,即为当前位置的字符对应的整型值str++;}if (flag)num = (-1)*num;return num;
}

3. 无符号整型unsignedint转字符串
整型数转字符串就和上述的做法相反。无符号整型数unsignedint的取值范围为0~65535,那么字符串就需要用大小为6的字符数组c存放。用变量num存放整型数。num%10得到当前num的个位,这个数再加上‘0’的ASCII值就得到num的个位所代表字符的ASCII值,装入字符数组c。此时num还需要减去个位数值,再除10,这样原先num的十位变成现在的个位。便于下一次重复操作。同时用变量i记录放在字符数组中的位置下标。直到num为0,整型数的每一位读取结束,此时i为字符串长度。打印字符数组c会发现整型数的每一位在数组中的顺序是倒着放的。所以还需要将字符数组逆置。逆置的实现可以用两个变量low、high,分别表示数组的第一个位置下标和最后一个位置下标,这两个下标,一个向后移,一个向前移,对应指向的元素交换位置,直到low>high为止,逆置完成。最后将数组c得到的字符串传给第二个形参。
这个函数是无返回值的void类型,得到的是数组。假设这个函数为返回字符数组的指针类型,返回值是一个指针,那么在调用该函数的位置需要定义一个字符指针s,放着这个函数内部字符数组c的起始地址。一旦这个函数执行结束,指针c的地址就会释放,那么s指向的内容为空。所以该做法不可取。
调用该函数前需要初始化一个大小为6的字符数组,然后将该数组的字符串给该函数的第二个形参s,指针s传递的是一个字符数组的起始地址。

函数实现代码如下:

void unsignedinttostr(int num,char *s)       //调用该函数前事先初始化一个大小为6的字符数组,第二个形参是该数组的指针
{char c[6];     //无符号整型int的范围是0~65535,c[5]放结束符int i = 0;memset(c, 0, sizeof(c));while (num){c[i] = num % 10 + '0';num = (num - num % 10) / 10;i++;}      //循环结束i=5int low = 0, high = i - 1;      //c[0]~c[4]这部分的字符串逆置while (low <= high){char temp = c[low];c[low] = c[high];c[high] = temp;low++;high--;}strcpy(s, c);
}

4. 有符号整型转字符串
该函数的思路和无符号整型unsignedint转字符串主体相同,不同的是需要判断需要判断整型数num 的正负。无符号整型数unsignedint的取值范围为-32768~+32768,那么字符串就需要用大小为7的字符数组c存放,c[0]存放整型数的正负号。在将数组c逆置的时候,逆置的是c[1]-c[5]这一段字符串。其余做法和无符号整型unsignedint转字符串相同。
调用该函数前需要初始化一个大小为7的字符数组,然后将该数组的字符串给该函数的第二个形参s,指针s传递的是一个字符数组的起始地址。
函数实现代码如下:

void inttostr(int num,char *s)       //该函数在使用时事先初始化一个大小为7的字符数组,第二个形参是该数组的指针
{char c[7];     //有符号整型int的范围是-32767~+32767,c[0]放符号,c[6]放结束符memset(c, 0, sizeof(c));if (num >= 0)c[0] = '+';elsec[0] = '-';int i = 1;            //从c[1]开始操作num = abs(num);while (num){c[i] = num % 10 + '0';num = (num - num % 10) / 10;i++;}       //循环结束i=6int low = 1, high = i - 1;      //c[1]~c[5]这部分的字符串逆置while (low <= high){char temp = c[low];c[low] = c[high];c[high] = temp;low++;high--;}strcpy(s, c);
}

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int unsignedstrtoint(char *str)     //开头不带正负号的字符串转整型
{int num = 0;if (NULL == *str)   //字符串为空return 0;else {while (str){if (*str<'0' || *str>'9')       //只要当前字符不在数字字符的范围内,直接跳出循环break;elsenum = num * 10 + (*str - '0');        //括号里面的是二者字符对应ASCII值的差值,即为当前位置的字符对应的整型值str++;}}return num;
}void unsignedinttostr(int num,char *s)     //调用该函数前事先初始化一个大小为6的字符数组,第二个形参是该数组的指针
{char c[6];     //无符号整型int的范围是0~65535,c[5]放结束符int i = 0;memset(c, 0, sizeof(c));while (num){c[i] = num % 10 + '0';num = (num - num % 10) / 10;i++;}      //循环结束i=5int low = 0, high = i - 1;      //c[0]~c[4]这部分的字符串逆置while (low <= high){char temp = c[low];c[low] = c[high];c[high] = temp;low++;high--;}strcpy(s, c);
}int strtoint(char *str)        //开头不带正负号的字符串转整型
{int num = 0;short flag;       //用于标记转换后整型的符号if (NULL == *str)   //字符串为空return 0;else if ('-' == *str){flag = 1;str++;}else if ('+' == *str){flag = 0;str++;}elseflag = 0;while (str){if (*str<'0' || *str>'9')        //只要当前字符不在数字字符的范围内,直接跳出循环break;elsenum = num * 10 + (*str - '0');        //括号里面的是二者字符对应ASCII值的差值,即为当前位置的字符对应的整型值str++;}if (flag)num = (-1)*num;return num;
}void inttostr(int num,char *s)     //该函数在使用时事先初始化一个大小为7的字符数组,第二个形参是该数组的指针
{char c[7];     //有符号整型int的范围是-32767~+32767,c[0]放符号,c[6]放结束符memset(c, 0, sizeof(c));if (num >= 0)c[0] = '+';elsec[0] = '-';int i = 1;            //从c[1]开始操作num = abs(num);while (num){c[i] = num % 10 + '0';num = (num - num % 10) / 10;i++;}       //循环结束i=6int low = 1, high = i - 1;      //c[1]~c[5]这部分的字符串逆置while (low <= high){char temp = c[low];c[low] = c[high];c[high] = temp;low++;high--;}strcpy(s, c);
}int main()
{printf("-----unsignedstrtoint---------\n");char *s1 = "12345";int num1 = unsignedstrtoint(s1);printf("%d\n", num1);printf("-----strtoint---------\n");char *s2 = "12345";int num2 = strtoint(s2);printf("%d\n", num2);char s3[] = "+12345";num2 = strtoint(s3);printf("%d\n", num2);char *s4 = "-12345";num2 = strtoint(s4);printf("%d\n", num2);printf("-----unsignedinttostr---------\n");int num3 = 12345;char s5[6];memset(s5, 0, sizeof(s5));unsignedinttostr(num3, s5);printf("%s\n", s5);printf("-----inttostr---------\n");int num4 = -12345;char s6[6];memset(s6, 0, sizeof(s6));inttostr(num4, s6);puts(s6);num4 = +12345;memset(s6, 0, sizeof(s6));inttostr(num4, s6);puts(s6);num4 = 12345;memset(s6, 0, sizeof(s6));inttostr(num4, s6);puts(s6);system("pause");
}

运行效果如下:

26.【C语言】字符串转无符号整型unsignedint、字符串转有符号整型int、无符号整型unsignedint转字符串、有符号整型转字符串(5_task)相关推荐

  1. R语言dplyr包使用recode函数进行数据列内容编码、转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值)

    R语言dplyr包使用recode函数进行数据列内容编码.转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值) 目录

  2. R语言ggplot2可视化:ggplot2可视化为轴标签添加复杂下标(Subscripts)和上标(superscripts)、离子化学符号(ionic chemical notation)等

    R语言ggplot2可视化:ggplot2可视化为轴标签添加复杂下标(Subscripts)和上标(superscripts).离子化学符号(ionic chemical notation)等 目录

  3. R语言ggplot2可视化:使用patchwork包将两个ggplot2可视化结果横向构成新的结果可视化组合图(使用|符号)

    R语言ggplot2可视化:使用patchwork包将两个ggplot2可视化结果横向构成新的结果可视化组合图(使用|符号) 目录

  4. 告别翻译机和第三方软件,微信自带3个功能轻松翻译26种语言!

    出国留学.境外出差.旅游.社交办公等学习.工作和娱乐,如果自己不懂对方的语言,一般都会用 到翻译机和第三方翻译软件,当然了如果你的工作为你专门配备了一名翻译可以忽略了. 废话不多说,下面带大家看看微信 ...

  5. 【C语言】PAT(Basic Level) 1003 “答案正确”是自动判题系统给出的最令人欢喜的回复。 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

    规则 "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正 ...

  6. C语言将一字符串输入到数组(长度不超过80)后将其输出, 将其中的英文字母大小写互换后再将整个字符串输出。

    题目 将一字符串输入到数组(长度不超过80)后将其输出, 将其中的英文字母大小写互换后再将整个字符串输出. 代码 # include <stdio.h> # include <str ...

  7. 无界鼠标连接不上解决办法Mouse without Borders(无界鼠标)

    无界鼠标连接不上解决办法Mouse without Borders(无界鼠标) 安装教程有很多.大家都知道了. 正好手里有台新装系统的电脑,又在学习Markdown,决定发第一篇.大家忽略排版的丑陋哈 ...

  8. C语言char*s 4,求讲解几道C语言的题 52 声明语句为“char s[4][15],*p1,**p2;int x,*y;”,下列语句中正...

    求讲解几道C语言的题 52 声明语句为"char s[4][15],*p1,**p2:int x,*y:",下列语句中正 2018-6-15来自ip:14.144.15.70的网友 ...

  9. Waymo真·无人车将开上加州马路,却不是申请无司机路测第一家

    夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI 过不了多久,没有司机的Waymo无人车就要开上加州马路了. 据<旧金山纪事报>报道,Google的兄弟公司Alphabet本周提 ...

  10. 写一函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为int strcmp(char * p1 ,char * p2); 设p1指向字符串s1, p2指向字符串s2。要求当s1=s2

    写一函数,实现两个字符串的比较.即自己写一个strcmp函数,函数原型为int strcmp(char * p1 ,char * p2); 设p1指向字符串s1, p2指向字符串s2.要求当s1=s2 ...

最新文章

  1. 什么是Python?好学吗?
  2. 4.1 深层神经网络-深度学习-Stanford吴恩达教授
  3. Android - 网络基础
  4. MySQL之 从复制延迟问题排查
  5. .Net Core with 微服务 - 分布式事务 - 2PC、3PC
  6. Hibernate框架 简述
  7. C++——override
  8. ES6学习(八)—Promise对象 超鸡重要
  9. 熊猫concat()例子
  10. [CF920G]List Of Integers
  11. CLP 中关闭自动落实的问题
  12. git生成key以及小乌龟git不需要密码
  13. python编程从入门到实践(第2版)第二章练习题解答
  14. 安装装ankhsvn
  15. 中国黑客VS外国黑客,5分钟让你明白谁更技高一筹
  16. C语言二维数组范德蒙,2、编写一个程序,实现一个3×4矩阵转置。
  17. 融云 php sdk下载,Android 即时语音聊天工具 开发
  18. 牛津博士讲大数据和量化金融
  19. Kali LInux 下Osmocom-BB开源项目
  20. 谈学习中的改变——有病要诊断,有药要服用

热门文章

  1. 河北涿州水稻种植历史 国稻种芯·中国水稻节:保定效益双赢
  2. idea运行maven项目依赖项scope:provided时启动报错NoClassDefFoundError解决
  3. 全球及中国食品级椰子油市场销售策略及需求形势分析报告(2022-2027)
  4. 这样写,才可以让JS对象中的key包含短横杠-
  5. 万博思图-HPLC数据可视化分析引擎
  6. 流水线的指令解读及相关计算
  7. python地图实例_pyecharts可视化地图的实例
  8. 外贸管理软件要如何挑选?
  9. python计算机视觉:复制和粘贴图像区域
  10. 智慧商贸销售退货操作