2007年3月14日星期三

c++食谱第三章部分笔记之一

第三章:数与字符串
此节讲了数字与字符串的互换以及数字之间的转换等问题,一共有七个例子,但对于boost部分在此处没有摘录,留着以后一并处理。
食谱3.1 把数字字符串转换为数
问题:
把字符串格式的数转换为整型或浮点型
方案:
有两种方法,标准库函数或者boost库的lexical_cast类,定义在<cstdlib>中的strtol,strtod,strtoul函数


#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
long hex2int(const string& hexStr){
char *offset;
if(hexStr.length()>2){
if(hexStr[0]=='o'&&hexStr[1]=='x'){
return strtol(hexStr.c_str(),&offset,0);
}
}
return strtol(hexStr.c_str(),&offset,16);
}
int main(){
string str1="ox12AB";
cout<<hex2int(str1)<<endl;
string str2="12AB";
cout<<hex2int(str2)<<endl;
string str3="QABD";
cout<<hex2int(str3)<<endl;
}


其输出结果为:
4779
4779
0
注意strtol的两种格式,当数字字符串带有前缀时,其第三个参数为0,如果没有前缀,此时是16进制转换,则为16。其他进制的使用类似,当数字字符串不满足转换条件时,输出为0。另外两个函数的使用与之类似。

没有评论: