1 長度
要想得到數組長度有4種操作sizeof(a)、strlen(a)、size()、length()
通過下面一段代碼可以大概瞭解它們之間的差別
#include<iostream>
#include<string> //size()和length()使用
#include"string.h" //strlen()使用
using namespace std;
int main()
{
int a[10] = {1,2};
char * b = NULL;
string c = "123";
char d[10] = {'g','4','\0','g'};
int num1 = sizeof(a); //a所佔空間的大小
cout << "sizeof(a)的大小爲: " << num1 << endl;
num1 = sizeof(a)/sizeof(int); //a中元素的個數
cout << "sizeof(a)/sizeof(int)的大小爲: " << num1 << endl;
num1 = sizeof(b); //字符指針所佔空間的大小
cout << "sizeof(b)的大小爲: " << num1 << endl;
num1 = strlen(d);//從第一個到‘\0’(不包括)之間元素的個數
cout << "strlen(d)的大小爲: " << num1 << endl;
num1 = sizeof(d);//d所佔字節的大小 (char類型佔1個字節)
cout << "sizeof(d)的大小爲: " << num1 << endl;
num1 = strlen(c.c_str());//strlen(k)後面的參數類型必須是char* ,char a[],string類型(用c_str()轉換成char*)
cout << "strlen(c.c_str())的大小爲: " << num1 << endl;
num1 = c.size(); //string專屬
cout << "c.size()的大小爲: " << num1 << endl;
num1 = c.length();//string專屬
cout << "c.length()的大小爲: " << num1 << endl;
return 0;
}
size(),length() ,是string的專屬,統計字符個數
strlen(a),用來統計字符數組裏到‘\0’爲止的字符個數,a只能是char*,char a[],或者由string通過c_str()轉化的類型
sizeof(a),用來統計a所佔空間的字節大小,a爲任意類型都可以
2 類型轉換
還是先看一段代碼
#include<iostream>
#include<string> //copy data c_str頭文件
#include"stdlib.h" //atoi頭文件
#include <sstream> //stringstream頭文件
using namespace std;
int main()
{
string a = "123li";
char* b = NULL;
int num = a.size();
char c[num] = {'0'};
b = (char*)a.c_str(); //c_str()轉換成const char*類型,所以要轉換成char*需要強制轉換
cout << "b = (char*)a.c_str()爲: ";
for(int i = 0; i < num; i ++)
cout << *(b++);
cout << endl;
const char* d = a.data();
cout << "d = a.data()爲: ";
for(int i = 0; i < num; i ++)
cout << *(d+i);
cout << endl;
a.copy(c,num,0); //第一個參數char*類型(char[]也行),第二參數拷貝個數,第三參數起始位置
cout << "a.copy(c,num,0)爲: ";
for(int i = 0; i < num; i ++)
cout << c[i];
cout << endl;
char* p = "hello";
a = p;
cout << "char* 轉 string 爲:" << a << endl;
a = "123li";
int out = atoi(a.c_str()); //開始是數字到第一個非數字止,要是開始是數字直接返回0
cout << "out = atoi(a.c_str())爲:" << out << endl;
//itoa(out,a,10); //編譯錯誤
stringstream ss; //數字和字符串互轉
double dou = 0.12542;
ss << a;
ss >> dou;
cout << "stringstream轉換爲: " << dou << endl;
return 0;
}
string 轉 char*有data()、copy()、c_str()
轉char[]有copy()或者循環賦值
char*轉string直接賦值
char轉int有atoi()、stringstream
數據類型轉char有stringstream