实现字符串到数字的转换

2024-05-07 18:18
文章标签 字符串 转换 数字 实现

本文主要是介绍实现字符串到数字的转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

嗯,今天看了JUly的编程艺术系列的文章,讲的很好,这个字符串到数字的转换程序写的很全面,考虑了空指针,非法输入,溢出问题等。非常好,学习了,现在把这个程序贴在这里,供以后需要时使用。

另外一点,如果把n定义成长整型,最后返回时系统会自动转换成整型, int类型的数据范围是-2147483648~2147483647,也就是负二十多亿到正的二十多亿,带符号十进制数11位,无符号12位。因此我给字符串动态分配了12位大小的char型长度。


// StrToInt(1).cpp : 定义控制台应用程序的入口点。
/*
<span style="white-space:pre">	</span>@mishidemudong
<span style="white-space:pre">	</span>@2015-5-27
*/
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<string>using namespace std;int StrToInt(const char* str)
{static const int MAX_INT = (int)((unsigned)~0 >> 1);static const int MIN_INT = -(int)((unsigned)~0 >> 1)-1 ;unsigned int n = 0;//判断是否输入为空if (str == NULL){return 0;}//处理空格while (isspace(*str))++str;//处理正负int sign = 1;if (*str == '+' || *str == '-'){if (*str == '-')sign = -1;++str;}//确定是数字后才执行循环while (isdigit(*str)){//处理溢出int c = *str - '0';if (sign > 0 && (n > MAX_INT / 10 || (n == MAX_INT / 10 && c > MAX_INT % 10))){n = MAX_INT;break;}else if (sign < 0 && (n >(unsigned)MIN_INT / 10 || (n == (unsigned)MIN_INT / 10 && c > (unsigned)MIN_INT % 10))){n = MIN_INT;break;}//把之前得到的数字乘以10,再加上当前字符表示的数字。n = n * 10 + c;++str;}if (sign==-1)n = 0-n;//vs2013这里会出现点问题:一元负运算符应用于无符号类型,结果仍为无符号类return n;   //所以我改了一下
}int _tmain(int argc, _TCHAR* argv[])
{char *str;int Trans_Num = 0;str = (char *)malloc(12*sizeof(char));gets_s(str,12);Trans_Num=StrToInt(str);printf("%d", Trans_Num);return 0;
}


这篇关于实现字符串到数字的转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968021

相关文章

Java设计模式之代理模式2-动态代理(jdk实现)

这篇是接着上一篇继续介绍java设计模式之代理模式。下面讲解的是jdk实现动态代理。 1.)首先我们要声明一个动态代理类,实现InvocationHandler接口 package com.zhong.pattern.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/*** 演

使用Array实现Java堆栈

本教程给出了使用Array 实现Stack数据结构的示例。堆栈提供将新对象放在堆栈上(方法push())并从堆栈中获取对象(方法pop())。堆栈根据后进先出(LIFO)返回对象。请注意,JDK提供了一个默认的Java堆栈实现作为类java.util.Stack。 适用于所有堆栈实现的两个强制操作是: push():数据项放置在堆栈指针指向的位置。pop():从堆栈指针指向的位置删除并返回数据

java后台DecimalFormat处理数字,3位加逗号分隔

package com.zhong;import java.math.BigDecimal;import java.text.DecimalFormat;/*** 给数字每三位加一个逗号工具类* @author admin**/public class DecimalFormatUtil {public static final String DEFAULT_FORMAT = "#,###.

Redis利用zset数据结构如何实现多字段排序,score的调整(finalScore = score*MAX_NAME_VALUE + getIntRepresentation(name) )

1、原文:   2、使用sql很容易实现多字段的排序功能,比如: select * from user order by score desc,name desc; 3、问题:用两个字段(score,name)排序。在redis中应该怎么做?   4、使用按分数排序的redis集合。你必须根据你的需要准备分数。 finalScore = score*MAX_NAME_VALUE +

字符串处理函数strchr和strstr的实现

1,strchr函数 函数功能:查找一个字符。在一个字符串中查找一个特定的字符。 函数原型:char *strchr(char const *str,int ch); 函数说明:strchr在字符串str中查找字符ch第一次出现的位置,找到后返回一个指向该位置的指针。如果该字符不存在于字符串中,则返回一个NULL指针。注意:第二个参数是一个整型值,但是,它包含了一个字符串值。

Android图片轮播的实现总结

前言: 在很多app中,我们都可以看到几张图片每隔一段时间就切换一下,这就是我们所称的图片轮播的功能,其主要实现就是用到了ViewPager, 下面我们来着重讲解一下其具体实现 效果图: 步骤一:在XML中添加ViewPager控件 比如: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:a

SpringMVC+Hibernate +MySql+ EasyUI实现CRUD

SpringMVC+Hibernate +MySql+ EasyUI实现CRUD 原文地址 http://my.oschina.net/xshuai/blog/345117

【百度语音识别】JavaAPI方式语音识别示例 MP3转PCM文件Java实现

【百度语音识别】JavaAPI方式语音识别示例MP3转PCM Java-API合成语音示例:http://ai.baidu.com/forum/topic/show/496727REST-API文档地址:http://ai.baidu.com/docs#/TTS-API/top注意:需要下载MP3插件jar。才可以进行MP3CONVERTPCM 链接: https://pan.baidu.c

数字信封(RSA和DES整合测试)加密技术

http://git.oschina.net/xshuai/ai 源码地址 DES加解密方法 package com.xs.demo.util;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKey

高德地图实现多天路线规划(途经点显示自定义内容)+轨迹回放(显示车牌)

​​​​​​​  联系作者Q/V:783021975 Tips: 1.高德地图最多支持16个途径点,如果超过可以进行数据优化,或进行数据再次拆分进行规划 2023年6月20日更新 如果遇到 获取驾车数据失败 :INVALID_USER_SCODE 请确保是否按官方文档要求的配置了安全密钥 准备-入门-教程-地图 JS API | 高德地图API 引入地图 JSAPI 脚本之前增加设置 JSAP