string、char*、int、char之間的愛恨情仇

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章