广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言如何实现将字符串转换成整数
  • 603
分享到

C语言如何实现将字符串转换成整数

2023-07-05 21:07:29 603人浏览 八月长安
摘要

本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这是一个很有意思的问题。请不要

本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并且实现这个函数,再来看讲解。

分析一下:函数名是StrToInt,那么可以这么调用:

int ret = StrToInt("1234");printf("%d\n", ret);

如果你写的程序能够正确输出1234,然后就觉得这道题就这样了,那么考虑的就不够全面。有没有一种可能:

传参时传了NULL指针。

传入空字符串。

字符串前面有空格,如:" 1234"。

有正负号,如:“-1234”。

有非法字符,如:“1234abcd”。

数字太大了,超出了int的存储范围,如:“1111111111111111111111111111111111111”。

下面我们一个一个解决。

准备工作

由于有可能出现非法字符,或者空字符串等,会有一些情况的转换是非法的。所以,定义一个全局性质的枚举类型来检验转换是否合法:

enum State{    VALID,    INVALID}s = INVALID;

默认的情况是非法的,只有转换成功才会把s的值置为VALID。

先把函数的框架撘出来:

int StrToInt(const char* str){}

接下来开始解决以下问题:

1.NULL指针

NULL指针是不能解引用的!所以最好断言一下。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);return ret;}

2.空字符串

如果一上来就遇到了’\0’,那么就是空字符串。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}}

3.空格

接下来,有可能会遇到空格,使用isspace函数来判断,把空格跳过去。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}}

4.正负号

接下来有可能遇到正负号,用一个flag来保存。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}// 正负号int flag = 1;if (*str == '+'){flag = 1;++str;}else if (*str == '-'){flag = -1;++str;}}

5.非法字符

下面开始处理数字。但是,有可能会遇到非法字符,所以要先判断一下。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}// 正负号int flag = 1;if (*str == '+'){flag = 1;++str;}else if (*str == '-'){flag = -1;++str;}// 处理数字while (*str){if (isdigit(*str)){}else{return ret;}}}

如何处理合法的数字呢?假设是1234,我们可以先定义一个ret,初始化成0。先拿到1,0*10+1,就得到了1。接着拿到2,1*10+2,就得到了12。再拿到3,12*10+3,就得到了123。最后拿到4,123*10+4,就得到了1234。以此类推。

每次ret = ret*10 + 拿到的数字就行了。但是“拿到的数字”是什么呢?就是*str-'0'。想象一下,'1'-'0'就是数字1,'6'-'0'就是数字6。两个字符相减就是对应的ASCII码相减。不过,拿到的数字得乘上flag再加上去,因为有可能是负数。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}// 正负号int flag = 1;if (*str == '+'){flag = 1;++str;}else if (*str == '-'){flag = -1;++str;}// 处理数字int ret = 0;while (*str){if (isdigit(*str)){ret = ret * 10 + flag * (*str - '0');++str;}else{return ret;}}s = VALID;return (int)ret;}

6.越界

这就完了吗?还有一种情况,假设传入的数字过大或过小,导致超出了int的存储范围,此时的转换也是非法的。判断方法,就是用更大的类型,如long long来存储,如果超出了int的存储范围(ret>INT_MAX || ret<INT_MIN),但是不会超出long long的存储范围,就能够识别什么时候越界了。

int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}// 正负号int flag = 1;if (*str == '+'){flag = 1;++str;}else if (*str == '-'){flag = -1;++str;}// 处理数字long long ret = 0;while (*str){if (isdigit(*str)){ret = ret * 10 + flag * (*str - '0');// 判断有没有超过int的存储范围if (ret > INT_MAX || ret < INT_MIN){return (int)ret;}else{++str;}}else{return (int)ret;}} // end of whiles = VALID;return (int)ret;}

最后如果转换成功,就把s置成VALID,再返回ret即可。注意ret是long long类型,但是返回类型是int,所以需要强制类型转换。

测试

完整的测试代码如下:

#include <stdio.h>#include <assert.h>#include <ctype.h>#include <limits.h>enum State{VALID,INVALID}s = INVALID;int StrToInt(const char* str){// 如果str是NULL,不能对其解引用assert(str);// 空字符串if (*str == '\0'){return 0;}// 空格while (isspace(*str)){++str;}// 正负号int flag = 1;if (*str == '+'){flag = 1;++str;}else if (*str == '-'){flag = -1;++str;}// 处理数字long long ret = 0;while (*str){if (isdigit(*str)){ret = ret * 10 + flag * (*str - '0');// 判断有没有超过int的存储范围if (ret > INT_MAX || ret < INT_MIN){return (int)ret;}else{++str;}}else{return (int)ret;}} // end of whiles = VALID;return (int)ret;}int main(){int ret = StrToInt("      -1234");if (s == VALID){printf("转换成功:%d\n", ret);}else{printf("转换失败:%d\n", ret);}return 0;}

输出结果:

C语言如何实现将字符串转换成整数

读到这里,这篇“C语言如何实现将字符串转换成整数”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C语言如何实现将字符串转换成整数

本文链接: https://www.lsjlt.com/news/355612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现将字符串转换成整数
    目录准备工作1.NULL指针2.空字符串3.空格4.正负号5.非法字符6.越界测试总结这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并...
    99+
    2023-05-14
    C语言字符串转整数 C语言 字符串 整数
  • C语言如何实现将字符串转换成整数
    本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这是一个很有意思的问题。请不要...
    99+
    2023-07-05
  • c语言如何将数字转换成字符串
    今天小编给大家分享一下c语言如何将数字转换成字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。c语言将数字转换成字符串的方...
    99+
    2023-07-04
  • c语言字符串怎么转换成整数
    在C语言中,可以使用`atoi()`函数将字符串转换为整数。`atoi()`函数的声明如下:```int atoi(const ch...
    99+
    2023-09-21
    c语言
  • php如何将整形转换成字符串
    在php中使用strval()函数将整形转换成字符串,具体方法如下:strval()函数作用:php中strval()函数的作用是用于获取变量的字符串值。strval()函数语法:string strval ( mixed $var )参数...
    99+
    2022-10-13
  • R语言-实现将向量转换成一个字符串
    将向量a,b装换成一个字符串,其中: a=c(1,2,3,4) b=c(2,3,4,5) 为了将其转化成一个字符串可以通过引入包stringr,使用str_c实现,使用past...
    99+
    2022-11-12
  • R语言如何实现将向量转换成一个字符串
    这篇文章给大家分享的是有关R语言如何实现将向量转换成一个字符串的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是R语言R语言是用于统计分析、绘图的语言和操作环境,属于GNU系统的一个自由、免费、源代码开放的软件...
    99+
    2023-06-14
  • c语言如何把字符转换成数字
    在C语言中,可以使用以下几种方法将字符转换为数字: 使用ASCII码:C语言中的字符是以ASCII码表示的,可以通过ASCII码将...
    99+
    2023-10-22
    c语言
  • javascript如何将字符串转换成数字
    这篇文章将为大家详细讲解有关javascript如何将字符串转换成数字,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 转换方法:1、利用“-”...
    99+
    2022-10-19
  • c语言整型怎么转换成字符型
    在C语言中,可以使用类型转换操作符(type casting operator)来将整型转换为字符型。 示例代码如下: int nu...
    99+
    2023-10-28
    c语言
  • go语言如何将整型转为字符串
    本篇内容介绍了“go语言如何将整型转为字符串”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!转换方法:1、用fmt包的Sprintf(),支持...
    99+
    2023-07-04
  • 如何用C语言实现将格式化数据和字符串相互转换
    这篇文章主要讲解了“如何用C语言实现将格式化数据和字符串相互转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用C语言实现将格式化数据和字符串相互转换”吧!sprintf和sscanf用...
    99+
    2023-07-05
  • javascript中如何将字符串转换成数字
    目录转换方法javascript将字符串转换成数字方法1方法2方法3方法4总结转换方法 1、利用“-”、“*”、“/&rd...
    99+
    2023-02-10
    javascript字符串 javascript数字 js字符串转换数字
  • C语言如何实现字符串替换
    在C语言中可以通过循环遍历字符串的每个字符,然后判断是否需要替换,如果需要替换则使用新的字符替换原字符。下面是一个示例代码,实现了字...
    99+
    2023-08-24
    C语言
  • 怎么在go语言中将字符串转换成浮点数
    怎么在go语言中将字符串转换成浮点数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。go语言将字符串转换成浮点数的方法:使用ParseFloat()函数ParseFloat(...
    99+
    2023-06-15
  • php如何将数组转换成字符串
    在php中使用implode函数将数组转换成字符串:implode函数是用于返回一个由数组元素组合成的字符串,语法:implode(separator,array);在php中使用implode函数将数组转换成字符串,具体方法如下:impl...
    99+
    2022-10-09
  • php如何将字符串转换成小数
    今天小编给大家分享一下php如何将字符串转换成小数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,我们需要注意一些基础知...
    99+
    2023-07-05
  • C#中怎么将字节数组转换成字符串
    C#中怎么将字节数组转换成字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#字节数组转换成字符串如果还想从 System.String 类中找到方法进行字符串和字节数组之...
    99+
    2023-06-17
  • php中如何将整数转换为字符串
    这篇文章主要讲解了“php中如何将整数转换为字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中如何将整数转换为字符串”吧!PHP中将整数转换为字符串在PHP程序开发中,我们时常需要...
    99+
    2023-07-05
  • c语言如何实现字符串反转
    C语言可以通过循环遍历字符串并交换字符的位置来实现字符串的反转。具体步骤如下:1. 首先,定义一个指向字符串的指针。2. 使用`st...
    99+
    2023-09-12
    c语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作