1.string 到 int 的转换
1) 在 C 标准库里面, 使用 atoi:
- #include <cstdlib>
- #include <string>
- std::string text = "152";
- int number = std::atoi( text.c_str() );
- if (errno == ERANGE) // 可能是 std::errno
- {
- //number 可能由于过大或过小而不能完全存储
- }
- else if (errno == ????)
- // 可能是 EINVAL
- {
- // 不能转换成一个数字
- }
2) 在 C++ 标准库里面, 使用 stringstream:(stringstream 可以用于各种数据类型之间的转换)
- #include <sstream>
- #include <string>
- std::string text = "152";
- int number;
- std::stringstream ss;
- ss <<text;// 可以是其他数据类型
- ss>> number; //string -> int
- if (! ss.good())
- {
- // 错误发生
- }
- ss <<number;// int->string
- string str = ss.str();
- if (! ss.good())
- {
- // 错误发生
- }
3) 在 Boost 库里面, 使用 lexical_cast:
- #include <boost/lexical_cast.hpp>
- #include <string>
- try
- {
- std::string text = "152";
- int number = boost::lexical_cast<int>( text );
- }
- catch( const boost::bad_lexical_cast & )
- {
- // 转换失败
- }
2. string 转 CString
CString.format("%s", string.c_str());
用 c_str()确实比 data()要好;
3.char 转 CString
CString.format("%s", char*);
4.char 转 string
string s(char *);
只能初始化, 在不是初始化的地方最好还是用 assign().
5.string 转 char *
char *p = string.c_str();
6.CString 转 string
string s(CString.GetBuffer());
GetBuffer()后一定要 ReleaseBuffer(), 否则就没有释放缓冲区所占的空间.
7. 字符串的内容转换为字符数组和 C-string
(1) data(), 返回没有 "\0" 的字符串数组
(2) c_str(), 返回有 "\0" 的字符串数组
(3) copy()
8.CString 与 int,char*,char[100]之间的转换
(1) CString 互转 int
将字符转换为整数, 可以使用 atoi,_atoi64 或 atol. 而将数字转换为 CString 变量, 可以使用 CString 的 Format 函数. 如
- CString s;
- int i = 64;
- s.Format("%d", i)
Format 函数的功能很强, 值得你研究一下.
- void CStrDlg::OnButton1()
- {
- CString
- ss="1212.12;
- int temp=atoi(ss);
- CString aa;
- aa.Format("%d",temp);
- AfxMessageBox("var is" + aa);
- }
(2) CString 互转 char*///char * TO cstring
- CString strtest;
- char * charpoint;
- charpoint="give string a value"; //?
- strtest=charpoint;
- ///cstring TO char *
- charpoint=strtest.GetBuffer(strtest.GetLength());
(3) 标准 C 里没有 string,char *==char []==string, 可以用 CString.Format("%s",char *)这个方法来将 char * 转成 CString.
要把 CString 转成 char *, 用操作符(LPCSTR)CString 就可以了.
CString 转换 char[100]
- char a[100];
- CString str("aaaaaa");
- strncpy(a,(LPCTSTR)str,sizeof(a));
BTW: 用 atof() 函数可以把字符串型 char* 转浮点数型 float
函数原型: double atof(const char *nptr);
函数说明: atof() 会扫描参数 nptr 字符串, 跳过前面的空格字符, 直到遇上数字或正负符号才开始做转换, 而再遇到非数字或字符串结束时 ('') 才结束转换, 并将结果返回. 参数 nptr 字符串可包含正负号, 小数点或 E(e)来表示指数部分, 如 123.456 或 123e-2. 返回值返回转换后的浮点型数.
- Example:
- /* 将字符串 a 与字符串 b 转换成数字后相加 */
- #include<stdlib.h>
- main()
- {
- char *a="-100.23";
- char *b="200e-2";
- float c;
- c=atof(a)+atof(b);
- printf("c=%.2f\n",c);
- }
来源: http://www.bubuko.com/infodetail-2735199.html