关闭

类型转换小结

标签: C++字符串变量类型转换编程数值转换
48200人阅读 评论(0) 收藏 举报
分类:

在编程的过程中,经常遇到变量类型转换问题,在此小结一下:

以下程序的头文件

#include<iostream>
#include<string>
#include<sstream> 
using namespace std;

(1)char*      char[]     到string的转换:

//char*  to  string
int CP1()
{
	char *p = "abcd";
	char t[] = "abcde";
	string test;
	test = p;
	cout << test << endl;
	cout << test.length() << endl;

	test = t;
	cout << test << endl;
	cout << test.length() << endl;
	return 0;
}
(2)string 到 char * 的转换:

//string  to  char*
int CP2()
{
	string test = "abc";
	char t[10];
	strcpy(t, test.c_str());
	cout << t << endl;
	cout << strlen(t) << endl;

	char *te;
	int number = test.length();
	te = new char[number + 1];
	cout << number << endl;
	/*test.copy(te, number, 0);
	*(te+number) = '0';
	cout << te << endl;*/

	strcpy(te, test.c_str());
	cout << te << endl;
	cout << strlen(te) << endl;

	delete[] te;
	return 0;		 
}
(3)string到const char* 的转换:

//string  to  const char*
int CP3()
{
	const char* c;
	string test = "1234";
	c = test.c_str();
	cout << c << endl;
	const char* t;
	t = test.data();
	cout << t << endl;
	return 0;
}
(4)int 到 string的转换:
//int to string
int CP4()
{
	int nt = 30;
	char c[30];

	//using C template to trans from int to string
	itoa(nt, c, 10);//参数3为进制,以几进制转换为 char
	cout << c << endl;
	cout << strlen(c) << endl;

	//using stringstream to trans from int to string
	stringstream test;
	test << nt;
	string stest = test.str();
	cout << stest << endl;
	cout << stest.length() << endl;

	//using to_string to trans from int to string  as the same double and float
	string str= to_string(nt);
	cout << str << endl;
	cout << str.length() << endl;
	return 0;
}
(5)string到int的转换:

//string to int
int CP5()
{
	string test = "17";
	char* t;
	int nt = static_cast<int>(strtol(test.c_str(), &t, 10));//10 表示转换进制
	cout << nt << endl;

	int nte;
	sscanf(test.c_str(), "%d", &nte);//%d 表示十进制
	cout << nte << endl;

	//using stringstream to trans from string to int
	stringstream stest;
	stest << test;
	int ntes;
	stest >> ntes;
	cout << ntes << endl;

	//using C template to trans from string to int
	int ntest = atoi(test.c_str());
	cout << ntest << endl;
	
	//using C++ template to trans from string to int
	int nnt;
	nnt = stoi(test.c_str());
	cout << nnt << endl;
	return 0;
}
(6)string 到 double的转换:

//string to double
int CP6()
{
	string test = "17.101";
	//using C template to trans from doubel to string
	double t = atof(test.c_str());
	cout << t << endl;
	return 0;
}

数值类型到string的转换可以有以下几种方式:

(1)使用函数模板+stringstream

(2)使用标准库函数std::to_string:

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
(3)使用C标准库函数:
atoi(str.c_str());
strtoul(str.c_str(), NULL, 10);
atof(str.c_str());
(4)使用C++标准库函数:

stoi()

在调用windowAPI函数的时候经常会遇到char与wchar的问题,在此贴出两者之间的转换函数:

(1)string  to WString

BOOL StringToWString(const std::string &str,std::wstring &wstr)
 {    
     int nLen = (int)str.length();    
     wstr.resize(nLen,L' ');
 
     int nResult = MultiByteToWideChar(CP_ACP,0,(LPCSTR)str.c_str(),nLen,(LPWSTR)wstr.c_str(),nLen);
 
     if (nResult == 0)
     {
         return FALSE;
     }
 
     return TRUE;
 }
(2)WString  to   string
BOOL WStringToString(const std::wstring &wstr,std::string &str)
 {    
     int nLen = (int)wstr.length();    
     str.resize(nLen,' ');
 
     int nResult = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wstr.c_str(),nLen,(LPSTR)str.c_str(),nLen,NULL,NULL);
 
     if (nResult == 0)
     {
         return FALSE;
     }
 
     return TRUE;
 }
(3)String    to    Wstring
std::wstring StringToWString(const std::string &str)
 {
     std::wstring wstr(str.length(),L' ');
     std::copy(str.begin(), str.end(), wstr.begin());
     return wstr; 
 }
(4)  Wstring    to   string
std::string WStringToString(const std::wstring &wstr)
 {
     std::string str(wstr.length(), ' ');
     std::copy(wstr.begin(), wstr.end(), str.begin());
     return str; 
 }







1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

数据结构课程总结

我想了好多,不知道从何写起,不是不知道写什么,而是想说的太多,不知道从何写起。。那就想到什么就说什么吧。   先说说我对慕课的看法吧,贺老师的翻转课堂不是我第一次接触慕课这个平台(不是智慧树),我第一次接触慕课是在大一的时候,大一刚入学,对一切都感到很新鲜,不适应大学的生活,特别是大学的...
  • big_ice
  • big_ice
  • 2016-12-17 21:38
  • 746

HTML5学习小结

HTML5是用于取代1999年所制定的 HTML4.01和XHTML1.0标准的HTML标准版本。 HTML5的第一份正式草案已于2008年1月公布;2012年12月,规范已经正式定稿。 W3C计划在2014年底发布HTML5推荐标准,在2016年底发布HTML5.1推荐标准。 HTML5有两...
  • gaojinshan
  • gaojinshan
  • 2014-03-27 16:10
  • 1982

大二上学期小结

日子过的真的是快,转眼间又快到了放假的时候。这一学期,作为大二,好好体验了一把学长的滋味(不过也是挺难当的,毕竟怎么说也得做好这个榜样),看着以前写过的博客,号称自己皂兄,这一学期过去,我就得给自己改一个外号了——晖姐!哈哈哈,不要怀疑,我是汉子,真汉子!这一学期,我对自己的生活轨迹做了一些调整,离...
  • feizaoSYUACM
  • feizaoSYUACM
  • 2016-12-26 13:22
  • 297

IE 10浏览器使用心得:界面简洁、功能很强大

IE 10浏览器的功能还是非常强大的,启动速度快,简洁到以展现内容为主导以及更好的兼容性,IE10与IE9一样建立在硬件加速图形工具软件之上,而且IE10将继续支持HTML5和CSS3。为了让Windows 8与Windows RT用户获得更安全的浏览保护,微软对IE浏览器中对Flash内容的访问做...
  • linux_loajie
  • linux_loajie
  • 2013-01-22 09:35
  • 3174

第一期宣讲会总结

宣讲会的目的:希望把我们团队里面学习到的经验,团队的学习资源给分享出去,帮助每一个大一想要学习的广东海洋大学学子。 宣讲会时间:2014-05-07举办了第一期。 宣讲会主讲人:骆宏,演讲嘉宾:余炳阳,廖志达,温辉翔,伍尚森。     会议过程:在会议的...
  • u010469003
  • u010469003
  • 2014-05-08 15:22
  • 1532

【jQuery】jQuery小结

前言    jQuery是个什么啊?是个框架。利用css选择器查找DOM对象,对其操作,操作样式或者增删方法等等。拥有强大的插件机制,可以使我们write less, do more。细数家珍(一)框架认识示例://找到button按钮,注册事件 $(&quo...
  • boniesunshine
  • boniesunshine
  • 2017-02-02 22:16
  • 229

Matlab常用小结

下面是最近使用matlab常用的一些方法总结,不断更新,方便以后查阅! 问题1:如果我想把matlab仅仅是当成一个计算器来使用呢?或者说高级点的计算器?不想开UI界面,能在命令行下快速启动。 简单,只需运行: ./matlab -nosplash -nodesktop -nojvmn...
  • ylf13
  • ylf13
  • 2014-01-15 20:00
  • 1123

【学习总结】顺序表模拟约瑟夫问题

问题描述: n个人围坐在一起,从第s个人报数,报到数字为m的人出列。然后从出列的下一个人重新从1开始报数,数到m的人出列,依次类推……直到所有人都出列,求出列次序。//说明为了符合实际,数组下标为0的都不用。 #include<stdio.h> #include<stdlib.h...
  • chendongqaq
  • chendongqaq
  • 2017-03-23 21:44
  • 336

VB阶段学习小结及感想

<span style="font-family:宋体;mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:...
  • Alisawxn
  • Alisawxn
  • 2015-12-25 09:57
  • 621

面试小结之IO篇

谈谈对Java IO的认识。 对于I/O操作来说, 其根本的作用在于传输数据。输入和输出指的仅是数据的流向,实际传输是通过某些具体的媒介来完成的,其中最主要的是文件系统和网络连接;早期的java.io包把I/O操作抽象成数据的流动,进而有了流的概念;在Java NIO中,则把I/O操作抽象成端...
  • u012516166
  • u012516166
  • 2017-08-03 19:15
  • 106
    个人资料
    • 访问:725804次
    • 积分:3057
    • 等级:
    • 排名:第13758名
    • 原创:29篇
    • 转载:1篇
    • 译文:0篇
    • 评论:10条
    最新评论