int、char、string型字符相互转换
2015-07-04 12:04
337 查看
转换:
1、string 转 CString
CString.format("%s", string.c_str());
2、char * 转 CString
CString.format("%s", char*);
3、char * 转 string
string s(char *);
4、string 转 char *
char *p = string.c_str();
5、CString 转 string
string s(CString.GetBuffer(CString.GetLength()));
6、CString 转 char *
charpoint=strtest.GetBuffer(strtest.GetLength());
不建议用(LPCTSTR)进行强制类型转化,这样strtest大小发生变化时会出现错误。
7、CString 转 char[100]
char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
注意:
1、string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2、CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
3、有三个函数可以将字符串的内容转换为字符数组和CSstring
(1)data(),返回没有”\0“的字符串数组
(2)c_str(),返回有”\0“的字符串数组
(3)copy()
4、将字符转换为整数,可以使用atoi、_atoi64或atol。
5、将数字转换为CString变量,可以使用CString的Format函数
CString s;
int i = 64;
s.Format("%d", i)
Format函数的功能很强,值得你研究一下。
性能比较:
1、安全性>
CString > string > char*;
2、灵活性
CString > string >char*;
3、可移植性
char* = string > CString
一、类声明头文件:
CString 头文件#include <afx.h>
string 头文件#include <string.h>
二、char型、string型、CString型之间的相互转换:
①、CString 转char * CString cstr; char *p = (LPSTR)(LPCTSTR)cstr;
②、string 转 CString CString.format(”%s”, string.c_str());
③、char 转 CString CString.format(”%s”, char*);
④、char 转 string string s(char *);
⑤、string 转 char char *p = string.c_str();
三、string型、CString型、char型之间的相互转换:
string s(CString.GetBuffer());
①string -> CString CString.format(”%s”, string.c_str()); 用c_str()确实比data()要好. ②char -> string string s(char *); 只能初始化,在不是初始化的地方最好还是用assign().
③CString -> string string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
用sprintf完成转换
char buffer[200];
char c = '1';
int i = 35;
long j = 1000;
float f = 1.7320534f;
sprintf( buffer, "%c",c);
sprintf( buffer, "%d",i);
sprintf( buffer, "%d",j);
sprintf( buffer, "%f",f);
二、字符串string转换为其它数据类型
temp="123456";
1)短整型(int)
i = atoi(temp);
2)长整型(long)
l = atol(temp);
3)浮点(double)
d = atof(temp);
string s; d= atof(s.c_str());
4)BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
...///完成对bstrValue的使用
SysFreeString(bstrValue);
5)CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp);
6)_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);
7)string转char*
string 是c++标准库里面其中一个,封装了对字符串的操作
把string转换为char* 有3中方法:
1。data
如:
string str="abc";
char *p=str.data();
2.c_str
如:string str="gdfd";
char *p=str.c_str();
3 copy
比如
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout < <p;
string
string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:
接下來要宣告一个字串变量,可以写成:
我们也可以在宣告的同时让它设成某个字串:
而要取得其中某一個字元,和传统C 的字串一樣是用 s[i] 的方式取得。比较不一樣的是如果 s 有三個字元,傳統 C 的字串的 s[3] 是 0 字元,但是 C++ 的 string 則是只到 s[2] 这個字元而已。
下面我们把 string 與 字元陣列的語法做一個對照:
从上面的表格,我們可以发现 string 的用法比较直观,因此如果沒有特別的需要,尽量使用 string 會比較方便。
int 转换为Srting、String转为int
方法一:
itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。
功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
int value 被转换的整数,char
*string 转换后储存的字符数组,int
radix 转换进制数,如2,8,10,16 进制
头文件: <stdlib.h>程序例:
[cpp] view
plaincopy
<span style="font-size:18px;">#include <iostream>
#include <stdlib.h>
using namespace std;
void main()
{
int n=1234;
char str[25];
itoa(n,str,10);
cout<<str<<" ";
int m=atoi(str);
cout<<m;
}
</span>
方法二
stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostream、fstream 有类似的操作方式。要使用 stringstream, 必須先加入這一行:
stringstream 主要是用在將一個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一开始的內容,例如:
題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來。
輸入:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
輸出:
6
251
4995
程序如下:
[cpp] view
plaincopy
#include <iostream>
#include <stdlib.h>
#include <string>
#include <sstream>
using namespace std;
void main()
{
string s;
stringstream ss;
int n, i, sum, a;
cin >> n;//共有n行
getline(cin, s); // 讀取換行
for (i=0; i<n; i++)
{
getline(cin, s);
ss.clear();
ss.str(s);
sum=0;
while (1)
{
ss >> a;//将String转换为int
if ( ss.fail() ) break;
sum+=a;
}
cout << sum << endl;
}
}
结果如下:
string类型是c语言中char *类型的一种更便利的实现。使用这个类型,不用再去刻意考虑内存的事儿。在做快速开发的时候,string对象提供的便利,还是相当出色的。然而,在这儿提醒一下:string类型很有可能成为一个工程效率问题的根源,产品级别的应用当中,应该尽量避免在深层循环嵌套中使用string类型。
除size()外,另外两个string常用的方法是find和substr。在下面的代码当中:
string
str = "aaaaddddssdfsasdf";
size_t
pos = str.find("ssdf", 3); //用if(pos
== string::npos) 用来判断是否找到子串。
string
str2 = str.substr(pos, 5);
find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。
char转换为Srting、String转为char
char转换为Srting
#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
char result[8] ;
stream << 8888; //向stream中插入8888
stream >> result; //抽取stream中的值到result
std::cout << result << std::endl; // 屏幕显示 "8888"
}
String转换为char
[cpp] view
plaincopy
#include <iostream>
#include <string>
using namespace std;
void main()
{
string s="abcd";
char *p=new char[s.size()+1];
strcpy(p,s.c_str());
cout<<p[1];
}
1、string 转 CString
CString.format("%s", string.c_str());
2、char * 转 CString
CString.format("%s", char*);
3、char * 转 string
string s(char *);
4、string 转 char *
char *p = string.c_str();
5、CString 转 string
string s(CString.GetBuffer(CString.GetLength()));
6、CString 转 char *
charpoint=strtest.GetBuffer(strtest.GetLength());
不建议用(LPCTSTR)进行强制类型转化,这样strtest大小发生变化时会出现错误。
7、CString 转 char[100]
char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
注意:
1、string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2、CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
3、有三个函数可以将字符串的内容转换为字符数组和CSstring
(1)data(),返回没有”\0“的字符串数组
(2)c_str(),返回有”\0“的字符串数组
(3)copy()
4、将字符转换为整数,可以使用atoi、_atoi64或atol。
5、将数字转换为CString变量,可以使用CString的Format函数
CString s;
int i = 64;
s.Format("%d", i)
Format函数的功能很强,值得你研究一下。
性能比较:
1、安全性>
CString > string > char*;
2、灵活性
CString > string >char*;
3、可移植性
char* = string > CString
一、类声明头文件:
CString 头文件#include <afx.h>
string 头文件#include <string.h>
二、char型、string型、CString型之间的相互转换:
①、CString 转char * CString cstr; char *p = (LPSTR)(LPCTSTR)cstr;
②、string 转 CString CString.format(”%s”, string.c_str());
③、char 转 CString CString.format(”%s”, char*);
④、char 转 string string s(char *);
⑤、string 转 char char *p = string.c_str();
三、string型、CString型、char型之间的相互转换:
string s(CString.GetBuffer());
①string -> CString CString.format(”%s”, string.c_str()); 用c_str()确实比data()要好. ②char -> string string s(char *); 只能初始化,在不是初始化的地方最好还是用assign().
③CString -> string string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
用sprintf完成转换
char buffer[200];
char c = '1';
int i = 35;
long j = 1000;
float f = 1.7320534f;
sprintf( buffer, "%c",c);
sprintf( buffer, "%d",i);
sprintf( buffer, "%d",j);
sprintf( buffer, "%f",f);
二、字符串string转换为其它数据类型
temp="123456";
1)短整型(int)
i = atoi(temp);
2)长整型(long)
l = atol(temp);
3)浮点(double)
d = atof(temp);
string s; d= atof(s.c_str());
4)BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
...///完成对bstrValue的使用
SysFreeString(bstrValue);
5)CComBSTR变量
CComBSTR类型变量可以直接赋值
CComBSTR bstrVar1("test");
CComBSTR bstrVar2(temp);
6)_bstr_t变量
_bstr_t类型的变量可以直接赋值
_bstr_t bstrVar1("test");
_bstr_t bstrVar2(temp);
7)string转char*
string 是c++标准库里面其中一个,封装了对字符串的操作
把string转换为char* 有3中方法:
1。data
如:
string str="abc";
char *p=str.data();
2.c_str
如:string str="gdfd";
char *p=str.c_str();
3 copy
比如
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout < <p;
string
string 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:
#include <string>
接下來要宣告一个字串变量,可以写成:
string s;
我们也可以在宣告的同时让它设成某个字串:
string s="TCGS";
而要取得其中某一個字元,和传统C 的字串一樣是用 s[i] 的方式取得。比较不一樣的是如果 s 有三個字元,傳統 C 的字串的 s[3] 是 0 字元,但是 C++ 的 string 則是只到 s[2] 这個字元而已。
下面我们把 string 與 字元陣列的語法做一個對照:
操作 | string | 字元陣列 |
宣告字串 | string s; | char s[100]; |
取得第 i 個字元 | s[i] | s[i] |
字串長度 | s.length() 或 s.size() | strlen(s) |
读取一行 | getline(cin, s); | gets(s); |
设成某字串 | s="TCGS"; | strcpy(s, "TCGS"); |
字串相加 | s=s+"TCGS"; s+="TCGS" | strcat(s, "TCGS"); |
字串比较 | s=="TCGS" | strcmp(s, "TCGS") |
int 转换为Srting、String转为int
方法一:
itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。
功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
*string 转换后储存的字符数组,int
radix 转换进制数,如2,8,10,16 进制
头文件: <stdlib.h>程序例:
[cpp] view
plaincopy
<span style="font-size:18px;">#include <iostream>
#include <stdlib.h>
using namespace std;
void main()
{
int n=1234;
char str[25];
itoa(n,str,10);
cout<<str<<" ";
int m=atoi(str);
cout<<m;
}
</span>
方法二
stringstream 是 C++ 提供的另一个字串型的串流(stream)物件,和之前学过的 iostream、fstream 有类似的操作方式。要使用 stringstream, 必須先加入這一行:
<span style="font-size:18px;">#include <sstream></span>
stringstream 主要是用在將一個字串分割,可以先用 clear( )以及 str( ) 將指定字串設定成一开始的內容,例如:
<p> </p><p>#include <iostream> #include <stdlib.h> #include <string> #include <sstream> using namespace std;</p><p>void main() { string s; stringstream ss(s),stream; ss.clear(); int a=0, b=10, c=6; ss<< a << b <<c; s=ss.str();//int 转换为String cout<<s<<" "; int n=0; stream<<s; stream>>n;//String 转换为int cout<<n; }</p><p><span style="font-size:18px;">下面我們看到一個使用 <span style="color:#00cc;">stringstream</span> 的例子:</span></p>
題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來。
輸入:
3
1 2 3
20 17 23 54 77 60
111 222 333 444 555 666 777 888 999
輸出:
6
251
4995
程序如下:
[cpp] view
plaincopy
#include <iostream>
#include <stdlib.h>
#include <string>
#include <sstream>
using namespace std;
void main()
{
string s;
stringstream ss;
int n, i, sum, a;
cin >> n;//共有n行
getline(cin, s); // 讀取換行
for (i=0; i<n; i++)
{
getline(cin, s);
ss.clear();
ss.str(s);
sum=0;
while (1)
{
ss >> a;//将String转换为int
if ( ss.fail() ) break;
sum+=a;
}
cout << sum << endl;
}
}
结果如下:
string类型是c语言中char *类型的一种更便利的实现。使用这个类型,不用再去刻意考虑内存的事儿。在做快速开发的时候,string对象提供的便利,还是相当出色的。然而,在这儿提醒一下:string类型很有可能成为一个工程效率问题的根源,产品级别的应用当中,应该尽量避免在深层循环嵌套中使用string类型。
除size()外,另外两个string常用的方法是find和substr。在下面的代码当中:
string
str = "aaaaddddssdfsasdf";
size_t
pos = str.find("ssdf", 3); //用if(pos
== string::npos) 用来判断是否找到子串。
string
str2 = str.substr(pos, 5);
find函数从str的第3个位置查起,找到ssdf这个子串后,返回子串的位置。而substr函数从pos位置开始,截取5个字符,赋值给str2。也就是说,str2之后的内容将是ssdfs。
char转换为Srting、String转为char
char转换为Srting
#include <sstream>
#include <iostream>
int main()
{
std::stringstream stream;
char result[8] ;
stream << 8888; //向stream中插入8888
stream >> result; //抽取stream中的值到result
std::cout << result << std::endl; // 屏幕显示 "8888"
}
String转换为char
[cpp] view
plaincopy
#include <iostream>
#include <string>
using namespace std;
void main()
{
string s="abcd";
char *p=new char[s.size()+1];
strcpy(p,s.c_str());
cout<<p[1];
}
相关文章推荐
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- checkbox数据回显问题
- 《C语言及程序设计》实践项目——初练结构体
- 关于jQuery方法解析(一)append-参数设置问题
- javscript__Tab切换
- Path Sum
- leetcode 35: Search Insert Position
- 使用Filter解决全站JSP/Servlert字符啊编码问题
- linux 多线程一篇挺好的文章(包括参数处理)
- sed
- (转载)UITableView使用详解
- GitHub gitignore官方文档翻译
- thinkphp Class 'Home\Mode\User' not found 无法找到数据模型类的问题
- 黑马程序员-----JAVA新特性
- 修改keystore密码别名等
- Eclipse - 快捷键的设置
- 错误: 未能从 xmlsocket://127.0.0.1:5840 中加载策略文件
- ecshop用户中心订单详情增加快递单物流信息查询显示的功能
- sql整理
- C++堆排序代码