C++实现字符串和整数之间的相互转换
来源:互联网 发布:tsp问题算法源代码 编辑:程序博客网 时间:2024/04/30 20:32
参考: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++实现字符串和整数之间的相互转换
- 实现字符串和整数的相互转换
- 编程实现整数和字符串的相互转换
- 字符串和整数之间的相互转化
- java 实现 :Base64字符串 和 图片 之间的相互转换
- 【整理】C/C++中字符串与整数之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- String字符串与整数之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- ruby中的整数、浮点数、字符串之间的相互转换
- Json 和字符串之间的相互转换
- 字符串和数字之间的相互转换
- 数组和字符串之间的相互转换
- C实现数制之间的相互转换
- C语言实现字符串IP与整数型IP的相互转换
- 【C#】Hex字符串与整数的相互转换
- C语言中字符串与整数的相互转换
- iOS 各种网络编程总结--进程、线程、Socket、HTTP、TCP/IP、TCP和UDP
- C/C++结构体详解
- 单元测试之测试目的
- android camera setParameters failed 类问题分析总结
- Helloworld模块编译.ko
- C++实现字符串和整数之间的相互转换
- Apache Camel框架之HTTP路由
- VMware CentOS 7 最小化安装 上网问题
- TCP的建立连接和关闭连接
- r1309151-逻辑回归小结
- C++|单链表的实现源代码
- 浏览器请求URL www.qq.com页面时会发生什么现象
- 数据结构:实验一 VC++编程环境的灵活应用
- 《Linux程序设计》——文件操作