▲1、C语言标准库函数atoi()等。
函数名: atoi
功 能: 把字符串转换成整型数
用 法: int atoi(const char *nptr);
程序例:
#include
int main(void)
{
int n;
char *str = "435";
n = atoi(str);
printf("string = %s integer = %d\n", str, n);
return 0;
}
其他相关函数——
函数名: atof
功 能: 把字符串转换成浮点数
用 法: double atof(const char *nptr);
程序例:
#include
int main(void)
{
float f;
char *str = "12345.67";
f = atof(str);
printf("string = %s float = %f\n", str, f);
return 0;
}
函数名: atol
功 能: 把字符串转换成长整型数
用 法: long atol(const char *nptr);
程序例:
#include
int main(void)
{
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", str, l);
return(0);
}
▲2、sprintf与Format构造字符串——
sprintf和printf都是C的产物,用法几乎一样,只是前者打印到字符串,后者直接在命令行上输出。
int sprintf( char *buffer, const char *format [, argument] … );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串(想想printf吧,一样的)。
如:
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
可以指定宽度,不足的左边补空格:
sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
当然也可以左对齐:
sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"
也可以按照16 进制打印:
sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐
sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐
这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个0 就可以了。
sprintf(s, "%08X", 4567); //产生:"000011D7"
上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。
控制浮点数打印格式
浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保
留小数点后6 位数字,比如:
sprintf(s, "%f", 3.1415926); //产生"3.141593"
但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf”格式,其中m 表
示打印的宽度,n 表示小数点后的位数。比如:
sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142
例:
#include
int main()
{
double a(3112);
char s1[10],s2[10];
sprintf(s1,"%d\n",(int)a);
sprintf(s2,"$%.2lf",a);
std::cout<
在C++里,也可用Format(CString) :
/*VS2005中,项目/属性/配置属性里字符集设置为未配置*/
解决方法:对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享DLL 中使用 MFC”,就OK了~~~
使用CString类,需包含以下头文件(CString类是MFC中的类)
#include
#include
#define _AFXDLL
int main()
{
double a(32);
CString s;
s.Format(_T("$%.2lf"),a);
std::cout< }
所以在VS2005 或者VS2008中,遇到一些输出等函数时,可能需要在前面加入一些符号
比如有:_T或者TEXT等等
▲3、字符串流stringstream提供的转换和/或格式化。(
这个问题经常出现!其实并不是你的真正出现了什么问题,只是你的编译链接的时候编译器自身的问题而已!也许是VS2005 ,VS2008 的BUG吧,解决的方法:点class view中的工程,选右键,再点clean就可以了; 或者是 build->clean solusion也可以,就是如此的简单 |
#include
#include
#include
#include
using namespace std;
int main()
{
int num(435);
string s;
ostringstream mystream;
mystream<
cout< }
#include
#include
#include
#include
using namespace std;
int main()
{
string s("435");
int num;
istringstream mystream(s);
mystream>>num;/*num=435*/
cout<
▲4、自己写函数。
/*串到数,实参如("435",&number)*/
void getnumber_from_string(char nums[],int *p)
{
int i,k=strlen(nums);
for(i=0,(*p)=0;i
}
int pow_10(int k) /*10的k次方*/
{
return (k==0?1:10*pow_10(k-1));
}
例子:
#include
using namespace std;
void main()
{
char str[10]; //用来保存结果的字符串
int a=12; //要转换的数字
cout<
char *s; //要转换的字符串 }
double d;
int i;
s="123.12345";
d = atof( s );//返回一个 float型
cout<
cout<
#include <sstream>
#Include <string>
string num2str(double i)
...{
stringstream ss;
ss<<i;
return ss.str();
}
数字转字符串:
用C++的streanstream:
#include
#Include
string num2str(double i)
...{
stringstream ss;
ss< return ss.str();
}
字符串转数字:
int str2num(string s)
...{
int num;
stringstream ss(s);
ss>>num;
return num;
}
string转char*