参考:http://www.cnblogs.com/GL-BBL/archive/2012/08/19/2646467.html

http://www.cnblogs.com/bluestorm/p/3168719.html

http://blog.sina.com.cn/s/blog_514c89a90100d7qh.html

//字符串转换为整数
//存在严重问题的一个程序,没有考虑到输入的字符串中有非数字字符和正负号,另外还要考虑到最大的正整数和最小的负整数以及溢出,另外如果输入时一个空指针,则程序崩溃
/*int strtoint(char* string)
{
int number=0;
while(*string!=0)
{
number=number*10+*string-'0';
++string;
}
return number;
}*/
#include<iostream>
#include<limits>// limits是STL提供的头文件(包含numeric_limits模板类)
using namespace std;
bool validinput=false;//定义一个全局变量,用于区分输入是否非法,通过检查这个全局变量,可以用来判断转换是否成功,一定要把validinput初始化为false
int strtoint(char* string)
{
long long num=0;//long long 是C99新的长整形,64位,在Win32平台和Win64平台中,其长度都是8Byte,相当于_int64
if(string!=NULL)
{
const char* digit=string;
int sign=0;//符号位,判断输入的字符串中的正负号
if(*digit=='-')
{
sign=-1;
digit++;
}
if(*digit=='+')
{
sign=1;
digit++;
}
while(*digit!='\0')
{
if(*digit<'0'||*digit>'9')//处理输入字符串中有非数字字符,那么终止转换,对于这种不正常的输入返回0
{
num=0;
break;
}
else
{
num=num*10+*digit-'0';
if(num>std::numeric_limits<int>::max())//检查输入是否溢出,如果溢出则返回0,对于这种不正常返回的0和正常返回的0,通过validinput这个全局变量来进行判断
{
num=0;//numeric_limits<int>::max()是int能表示的最大的范围
break;
}
digit++;
}
}
//while循环终止有两种可能,一种是超过范围,或者遇到了字符串中的非数字字符,此时digit不能与‘\0’,另外一种可能是digit='\0'
if(*digit=='\0')
{
validinput=true;//如果运行到了‘\0’说明转换成功
num=sign*num;//把以前字符串的符号位加上,区别正负号
}
}
return static_cast<int>(num);//编译器强制类型转换,把long long整型转换为int整型。注意num两边的括号不要漏掉
}
int main()
{
char* string1=" ";
char* string2=NULL;
char* string3="+12345678";
char* string4="-12345678";
char* string5="+123ab678";
int convertresult=strtoint(string1);
if(validinput==true)
cout<<convertresult<<endl;
else
cout<<"error input"<<endl;
return 0;
}

//要注意正负整数符号位的保存
#include<iostream>
using namespace std;
bool Isnegative=false;
char* numtostr(int num,int length)
{
if(num<0)
{
num=-num;
Isnegative=true;
}
char *buf=new char[length+2];//最后一位放置字符串结束符,并且如果是负数还要留一位放负号
memset(buf,'0',length+1);//从0到length+1即length+2初始化为‘0’
buf[length+1]='\0';//最后一项放结束符
int index=0;
while(num)
{
buf[index++]=num%10+'0'; //result存不满的为全部初始化为‘0’
num=num/10;    
}
if(Isnegative)
buf[index]='-';
char *result=new char[length+2];
for(int i=0;i<length+1;i++)//把buf中从0到length范围工length+1的包括了正负号的值copy到result中,符合打印习惯
result[i]=buf[length-i];
result[length+1]='\0';
return result;
}
int main()
{
int num=-1234567890;
int length=0;
int temp=num;//用来计算输入数字有多少位,不能用num来计算,否则等到传入numtostr中时,num已经为0了
while(temp)
{
length++;
temp/=10;
}
while(temp)
{
length++;
temp/=10;
}
char *result=numtostr(num,length);
if(Isnegative)
for(int i=0;i<length+2;i++)
cout<<result[i];
else
for(int i=1;i<length+2;i++)
cout<<result[i];
cout<<endl;
return 0;
}

C++实现字符串和整数之间的相互转换相关推荐

  1. C++ 字符串和数字之间的相互转换

    能完成字符串和数字转换的方法多种多样: 1.使用string自带函数 数字转字符串:to_string() 字符串转数字:stoi().stol().stof().stod()等等 例: int i ...

  2. Java实现 String类型的ip与整数之间的相互转换(2021.8.1百度提前批面试题)

    题目: 实现 String 类型的 ip 与整数之间的相互转化.例如:将 "192.168.0.1" 转换为整数,然后给定这个整数仍然可以得到这个 String 类型的 ip. / ...

  3. Python数字、字符串、数组之间的相互转换

    在平时刷题中,经常需要在数字.字符串.数组之间做转换,苦于网上没有全面的总结,遂自己稍微总结一下. 文章目录 Python数字.字符串.数组相互转换 Python数组转数字 Python数字转数组 P ...

  4. Python3 字符串与hex之间的相互转换

    在字符串转换上,python2和python3是不同的,在查看一些python2的脚本时候,总是遇到字符串与hex之间之间的转换出现问题,记录一下解决方法. 1. 在Python2.7.x上,hex字 ...

  5. c++ cstring 转换 char_C语言进阶之路:字符串与整数之间的转换!

    在C语言中,我们经常面临需要将字符串转换为整型,以及将整型转化为字符串的问题. 将字符串转换为整数的函数在stdlib.h中定义: int atoi(const char *str); atoi函数会 ...

  6. java 转byte字符串,Java 字符串与byte之间的相互转换

    写在前面 上次在简书上第一次发表文章多了30位朋友关注和收到80多个喜欢让我受宠若惊.我当时打算以后要多写一些有价值的文章,才对得起关注我的朋友.然而,爱游戏的我在刚不久前把四公主接回来了~这一个多月 ...

  7. C++ 字符串与整数之间的转换

    一.字符串转整数 1.利用stoi函数 #include<iostream> #include<string> using namespace std; int main(){ ...

  8. Java 字符串与整数之间的互相转换

    1.如何将字符串String转化为整数int int i = Integer.parseInt(str); int i = Integer.valueOf(my_str).intValue(); 注: ...

  9. golang获取当前时间、时间戳和时间字符串及它们之间的相互转换

    1.获取当前时间 (1) currentTime:=time.Now() //获取当前时间,类型是Go的时间类型Time (2) t1:=time.Now().Year() //年t2:=time.N ...

最新文章

  1. php点击根据价格升降序,织梦列表页点击按价格按评分按更新按点击排序进行筛选方法...
  2. centos7修改密码
  3. JavaScript学习笔记(十五)
  4. css flexbox模型_如何将Flexbox后备添加到CSS网格
  5. POJ 3613 Cow Relays (floyd + 矩阵高速幂)
  6. oracle 查看等待事务,ORACLE 等待事务查询语句
  7. vue的生命周期和钩子函数的理解
  8. 6-4 链表拼接 (20分)_数据结构之链表
  9. 《Windows游戏编程大师技巧》中关于DirectDraw和创建DirectDraw知识笔记
  10. MFC中SetTimer函数
  11. Java短信验证码-互亿无线
  12. Elasticsearch-2-附面试题
  13. ignore在mysql中什么意思_ignore是什么意思
  14. Hyperledger Fabric 链码生命周期
  15. oracle omf管理,论OMF管理文件的重要性
  16. 装修店铺营销活动策划?
  17. python 网页答题器_大话西游答题器 Python版本
  18. javascript入门实例:实现简单网页功能
  19. 【实战篇】39 # 如何实现世界地图的新冠肺炎疫情可视化?
  20. 2022第三届全国大学生网络安全精英赛练习题(全部试题)

热门文章

  1. 在控制台打印sql语句的办法(MyBatis Log Plugin插件的安装与使用)
  2. mysql 只允许本地登陆 centos,Centos中MySQL设置密码跟不允许匿名登陆
  3. winfrom里面使用类似于table的合并的控件_Flink集成iceberg数据湖之合并小文件
  4. python 批量下载网址_python 遍历oss 实现批量下载
  5. java包装类和基本类型谁先谁后_你知道Java中基本类型和包装类的区别吗
  6. python动态创建类_Python中通过参数动态创建扩展类(class)
  7. js margin作用到父元素_CSS中margin-top对父级元素产生作用的问题
  8. 什么叫大地高_等电位箱有什么用?
  9. 服务器断电重启修复,WIN取消100M隐藏分区、异常断电后绕过修复模式
  10. 乐山师范计算机科学与技术怎么样,乐山师范学院计算机科学与技术(本科)教育概况...