Posted on 03-09-2009
Filed Under (技术) by waterlin

在 C++ 里,如果需要把 int 的数值直接转成字符串(例如对于整数123,我能得到字符串”123″),我们可以用很多种方法来实现:

1) 用 C++ 里的流控制,可以轻松地实现整数转成字符串的功能:

#include <sstream>
#include <iostream>

main()
{
    int abc = 123;
    std::ostringstream out;
    out << abc;
    std::cout << out.str() << std::endl;
}

下面是宽字符版本的演示程序,稍微有点不同,则可以用下面的方法:

int current = 111;
std::wostringstream int2string;
int2string << current;

wstring temp_file = int2string.str().c_str();
wprintf(L”current filename is: %s\n”, temp_file.c_str());
wprintf(L”current filename is: %s\n”, int2string.str().c_str());

2) Boost 是 C++ 的准标准库,我们当然应该尝试学习使用 Boost 来完成这个转换,例子如下:

#include <boost/lexical_cast.hpp>

main()
{
    int abc = 123;
    std::string s = boost::lexical_cast<std::string>(abc);

    printf("test for string: %s",s.c_str());
}

3) 用 C 标准库里的 sprintf 或是 swprintf 函数,注意,sprintf 需要头文件 <stdio.h>,而 swprintf 需要 <stdio.h> 或者 <wchar.h> 头文件,可以看看MSDN里的例子

#include <stdio.h>

int main( void )
{
    char  buffer[200], s[] = "computer", c = 'l';
    int   i = 35, j;
    float fp = 1.7320534f;

    /* Format and print various data: */
    j  = sprintf( buffer,     "   String:    %s\n", s );
    j += sprintf( buffer + j, "   Character: %c\n", c );
    j += sprintf( buffer + j, "   Integer:   %d\n", i );
    j += sprintf( buffer + j, "   Real:      %f\n", fp );

    printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}

4) 用 C 标准库的 itoa 函数也可以实现从字符串到数字的转换,itoa的例子代码:

/* itoa example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int i;
    char buffer [33];
    printf ("Enter a number: ");
    scanf ("%d",&i);
    itoa (i,buffer,10);
    printf ("decimal: %s\n",buffer);
    itoa (i,buffer,16);
    printf ("hexadecimal: %s\n",buffer);
    itoa (i,buffer,2);
    printf ("binary: %s\n",buffer);
    return 0;
}

同样,用 C 标准库的 atoi 函数可以实现从字符串到数字的转换,atoi的例子代码:

/* atoi example */
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int i;
    char szInput [256];
    printf ("Enter a number: ");
    fgets ( szInput, 256, stdin );
    i = atoi (szInput);
    printf ("The value entered is %d. The double is %d.\n",i,i*2);
    return 0;
}

一般来讲,就上面这么四种常用的方法就够用了。

© 2009, 浏忙大爆炸. All rights reserved.
除非注明,浏忙大爆炸文章均为原创,转载请以链接形式标明本文地址。

Post a Comment
Name:
Email:
Website:
Comments: